-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/ '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) 
관련 문제