-2

ユーザーがプロファイルモデルでデータと一緒に登録できるようにフォームを作成しています。カテゴリフィールドにManyToManyがあり、保存時にエラーが表示されます。djangoのテンプレートから新しいユーザーを作成するときにエラーが発生する

これは私のフォームです。

class UserForm(UserCreationForm): 

negocio = forms.CharField(max_length=30) 
encargado = forms.CharField(max_length=30) 
imagen = forms.ImageField() 
direccion = forms.CharField(max_length=30) 
telefono = forms.DecimalField(max_digits=15, decimal_places=0) 
email  = forms.EmailField() 
categoria = forms.ModelMultipleChoiceField(queryset=Categoria.objects.all()) 
lat  = forms.CharField(max_length=30) 
lng  = forms.CharField(max_length=30) 

これは私のモデルです。

class Perfil(models.Model):#Este es el perfil del usuario(solo existe uno por cada usuario) 
user   = models.OneToOneField(User, related_name='profile') 
nombre_negocio = models.CharField(max_length=50, unique=True) 
encargado  = models.CharField(max_length=50,null=True,blank=True) 
imagen   = models.ImageField(upload_to = 'perfiles',null=True,blank=True) 
direccion  = models.CharField(max_length=100) 
telefono  = models.DecimalField(max_digits=15, decimal_places=0,null=True,blank=True) 
email   = models.EmailField() 
category  = models.ManyToManyField(Categoria) 
inicio   = models.DateTimeField(null=True,blank=True) 
final   = models.DateTimeField(null=True,blank=True) 
lat   = models.CharField(max_length=50,null=True,blank=True) 
lng   = models.CharField(max_length=50,null=True,blank=True) 


def save(self, *args, **kwargs): 
    if not self.id: 
     self.slug = slugify(self.nombre_negocio) 
    super(Perfil, self).save(*args, **kwargs) 

def __unicode__(self): 
    return self.nombre_negocio 




class Categoria(models.Model): 

name = models.CharField(max_length=50) 
slug = models.SlugField(editable=False) 
imagen = fields.ImageField(upload_to = 'categorias',null=True,blank=True,dependencies=[ 
    FileDependency(processor=ImageProcessor(
     format='JPEG', scale={'max_width': 200, 'max_height': 150})) 
]) 

def save(self, *args, **kwargs): 
    if not self.id: 
     self.slug = slugify(self.name) 
    super(Categoria, self).save(*args, **kwargs) 

def __unicode__(self): 
    return self.name 

これは私の見解です。

class RegistrarUsuario(FormView): 
form_class = UserForm 
template_name = 'home/registrar.html' 
success_url = '/registrar' 

def form_valid(self,form): 
    user = form.save() 
    email = form.cleaned_data['email'] 
    direccion  = form.cleaned_data['direccion'] 
    nombre_negocio = form.cleaned_data['negocio'] 
    category  = form.cleaned_data['categoria'] 
    encargado  = form.cleaned_data['encargado'] 
    telefono  = form.cleaned_data['telefono'] 
    imagen   = form.cleaned_data['imagen'] 
    lat   = form.cleaned_data['lat'] 
    lng   = form.cleaned_data['lng'] 
    user_profile = Perfil(user=user,nombre_negocio=nombre_negocio,encargado=encargado,imagen=imagen,direccion=direccion,telefono=telefono,email=email,category=category,lat=lat,lng=lng) 

    user.save() 
    user_profile.save() 

    return super(RegistrarUsuario, self).form_valid(form) 

また、カテゴリフィールドにデータを保存する方法もわかりません。

+0

エラーが発生した場合は、それを教えてください。 –

+0

申し訳ありませんが、問題はカテゴリカテゴリです。 TypeError at/registrar/ 'category'は、この関数の無効なキーワード引数です –

答えて

1

モデルをインスタンス化するときに多対多のフィールドを割り当てることはできません。これらのフィールドは別のテーブルに格納されているため、最初にアイテムを保存する必要があるためです。それを取り出して後で割り当てます。

user_profile = Perfil(user=user,nombre_negocio=nombre_negocio,encargado=encargado,imagen=imagen,direccion=direccion,telefono=telefono,email=email,lat=lat,lng=lng) 
user_profile.save() 
user_profile.category.add(*category) 
関連する問題