Ошибка экземпляра при сохранении ввода формы Django в модель

Эта ошибка появляется при попытке сохранить входы в модель Невозможно присвоить "3380786777": "Registration.nid" должен быть экземпляром "Nid". В этом проекте я использую базу данных MySQL. Пытался несколько часов, чтобы исправить это. Уже вставил значения в таблицу Nid и Nid, который я пытался вставить в таблицу Registration, существует в таблице Nid.

Вот моя модель:

class Nid(models.Model):
id = models.BigIntegerField(primary_key=True)
fname = models.CharField(db_column='FName', max_length=100, blank=True, null=True)  # Field name made lowercase.
lname = models.CharField(db_column='LName', max_length=100, blank=True, null=True)  # Field name made lowercase.
dob = models.DateField()
fathers_name = models.CharField(db_column='Fathers_Name', max_length=150, blank=True, null=True)  # Field name made lowercase.
mothers_name = models.CharField(db_column='Mothers_Name', max_length=150, blank=True, null=True)  # Field name made lowercase.
address = models.ForeignKey(Address, models.DO_NOTHING, db_column='Address_ID', blank=True, null=True)  # Field name made lowercase.

class Meta:
    managed = False
    db_table = 'nid'
    
class Registration(models.Model):
            nid = models.OneToOneField(Nid, models.DO_NOTHING, db_column='NID', primary_key=True)  # 
            Field name made lowercase.
            date = models.DateTimeField(db_column='Date')  # Field name made lowercase.
            center = models.ForeignKey(Center, models.DO_NOTHING, db_column='Center_ID', blank=True, 
            null=True)  # Field name made lowercase.
            mobile_no = models.IntegerField(db_column='Mobile_No', blank=True, null=True)  # Field 
            name made lowercase.
            age = models.IntegerField(db_column='Age')  # Field name made lowercase.
        
            class Meta:
                managed = False
                db_table = 'registration'
                unique_together = (('mobile_no', 'center'),)


Form:

    class PostForm(forms.Form):
       
       NID  = forms.IntegerField()
       Date_of_Birth =forms.DateField(widget=forms.SelectDateWidget(years=range(1921,2004)))
       Phone_number  = forms.IntegerField()
       Center = forms.ChoiceField(choices=choice)
       CAPTCHA = forms.CharField()
     

Вид:

class RegistrationView(FormView):
    template_name = "registration.html"
    form_class = PostForm
    success_url='/otp'
   
   

    def form_valid(self, form):
        search_term=form.cleaned_data['NID']
        search_term2=form.cleaned_data['Date_of_Birth']
        search_term3=form.cleaned_data['Phone_number']
        search_term4=form.cleaned_data['Center']
        valid = Nid.objects.filter(id=search_term)
        
        new_object = Registration.objects.create(
          nid = form.cleaned_data['NID'],
          center = form.cleaned_data['Center'],
          mobile_no = form.cleaned_data['Phone_number'],
          age = 19

        )
       

        for objects in valid:
            if valid and objects.dob == search_term2:
               
                return super().form_valid(form)
            else:
              form.add_error('NID', 'You are not eligible')
              return self.form_invalid(form)

Игнорировать значение возраста.

Поскольку поле модели регистрации nid является полем OneToOneField, то в форме следует использовать ModelChoiceField.

class PostForm(forms.Form):
    NID = forms.ModelChoiceField(queryset=Nid.objects.all())
    # other fields

иначе сначала вы получите объект Nid-модели из значения NID перед созданием объекта регистрации

try:
    nid_obj = Nid.objects.get(id=form.cleaned_data['NID'])
except:
    # raise exception

new_object = Registration.objects.create(
                nid=nid_obj,
                center=form.cleaned_data['Center'],
                mobile_no=form.cleaned_data['Phone_number'],
                age = 19
             ) 
Вернуться на верх