问题描述
我是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来检查相应的表单和模型字段。