#python #django
#питон #джанго #python #django
Вопрос:
Я новичок в 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».
Я пробую разные вещи, но я не могу решить эту ситуацию.
Ответ №1:
Поскольку ваша модель принимает, ForeignKey
вы не можете назначить character
тип. Итак, вы должны использовать sthg, такой как ModelChoiceField.
class formulario_compra(forms.ModelForm):
cedula_prod = ModelChoiceField(queryset=Persona.objects.all())
Вы можете посмотреть здесь, чтобы проверить соответствующие поля формы и модели.