Ошибка экземпляра при сохранении ввода формы 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
)