在django中从模板创建新用户时出错

时间:2017-03-08 19:46:21

标签: django django-models django-forms django-views django-admin

我正在创建一个表单,以便用户可以在配置文件模型中一起注册他们的数据,问题出在ManyToMany的Category字段中,并在保存时给我错误。

这是我的表格。

StateObject

这些是我的模特。

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

我不知道怎样做才能很好地保存类别字段中的数据。

1 个答案:

答案 0 :(得分: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)