无法分配“值”:“ model.attr”必须是“ model”实例

问题描述

我是django新手,在models.py中有下一个模型

class Persona(models.Model): 
    cedula_p= models.CharField(primary_key=True,max_length=10)
    Nombre_p= models.CharField(User,max_length=100)
    fecha_nacimiento_p= models.DateField()
#11111,User1,01/01/1991
#22222,User2,02/02/1992
#Others 13998 items

    def __str__(self):
       return "{0},{1}".format(self.cedula_p,self.Nombre_p)

class Producto(models.Model):
    Nombre_prod = models.CharField(max_length=100)
    precio = models.PositiveIntegerField()

    def __str__(self):
        return "{0}".format(self.Nombre_prod)
        
class compra(models.Model):
    cedula_prod= models.ForeignKey(Persona,max_length=10,on_delete=models.CASCADE)
    producto = models.ForeignKey(Producto,on_delete=models.CASCADE)

forms.py是:

class formulario_compra(forms.ModelForm):
    cedula_prod = forms.CharField() 
#I have 14.000 elements,for that reason i don't use select o choicefield

    class Meta:        
        model = compra
        fields = '__all__'

#input test cedula_prod: 11111 or 22222

和views.py

class crear_persona(CreateView):
    model = Persona
    form_class = formulario_persona
    template_name = 'web1.html'
    success_url = reverse_lazy('EjemploVista1')

class crear_compra(CreateView):
    model = compra
    form_class = formulario_compra
    template_name = 'Web2.html'
    success_url = reverse_lazy('EjemploVista2')

在表格中,在Formulario_compra中,我不使用cedula_prod的默认表格,因为它将是带有某些值的列表(14000),所以,我使用了charField。我需要验证模型Persona.cedula_p中是否存在输入。此时尝试保存:

无法分配“ 11111”:“ compra.cedula_prod”必须是“ Persona”实例。

我尝试了不同的方法,但是我无法解决这种情况。

解决方法

由于模型采用ForeignKey,因此无法分配character类型。因此,您必须使用ModelChoiceField之类的东西。

class formulario_compra(forms.ModelForm):
    cedula_prod = ModelChoiceField(queryset=Persona.objects.all()) 

您可以看到here来检查相应的表单和模型字段。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...