Не удается присвоить «‘значение'»: «model.attr» должен быть экземпляром «модели»

#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()) 
  

Вы можете посмотреть здесь, чтобы проверить соответствующие поля формы и модели.