Ошибка внешнего ключа При отправке форм
Я создал модель и она содержит поля с внешним ключом, но когда я пытаюсь отправить, она показывает ошибку, говоря, что число не может быть назначено полю, где назначен внешний ключ. Как я могу загрузить имя. Картинка ошибки как ниже картинка
model.py
class UserReg(models.Model):
username=models.ForeignKey(settings.AUTH_USER_MODEL,default=1,null=True,on_delete=models.CASCADE)
Name=models.CharField(max_length=200)
Date_of_Birth=models.DateField()
Age=models.IntegerField()
Gender=models.CharField(max_length=200, choices=GenderChoice)
Phone_no=models.IntegerField()
Mail=models.EmailField(unique=True)
Address=models.TextField(max_length=700)
District=models.ForeignKey(District,on_delete=models.CASCADE)
Branch=models.ForeignKey(Branch,on_delete=models.CASCADE)
Account_Type=models.CharField(max_length=200,choices=AccType)
Materials=models.ManyToManyField(Materials)
class District(models.Model):
name=models.CharField(max_length=200)
Views.py
def reg(request):
form = Userform(request.POST or None)
if request.method == 'POST':
username=request.POST.get('username')
Name=request.POST.get('Name')
Date_of_Birth = request.POST.get('Date_of_Birth')
Age = request.POST.get('Age')
Gender = request.POST.get('Gender')
Phone_no = request.POST.get('Phone_no')
Mail = request.POST.get('Mail')
Address = request.POST.get('Address')
District = request.POST.get('District')
Branch = request.POST.get('Branch')
Account_Type = request.POST.get('Account_Type')
Materials = request.POST.get('Materials')
obj=UserReg(username=username,Name=Name,Date_of_Birth=Date_of_Birth,Age=Age,Gender=Gender,
Phone_no=Phone_no,Mail=Mail,Address=Address,District=District,Branch=Branch,Account_Type=Account_Type,Materials=Materials)
obj.save()
return redirect('/')
return render(request,'registration.html',{'form':form})
Похоже, вы пытаетесь присвоить целое число полю внешнего ключа. Значение, возвращаемое из формы, будет внешним ключом (целое число, поскольку в данном вопросе это поле id), а поле внешнего ключа принимает в качестве аргумента сам экземпляр. Попробуйте присвоить полю district = District.objects.get(pk=District)
Ошибка просто говорит, что вместо "5" нужно присвоить реальный экземпляр модели District
.
Итак, сначала возьмите экземпляр района из модели District
через get_object_or_404
затем присвойте его модели UserReg
, так:
Если ничего не найдено, то будет выдана ошибка Http404.
def reg(request): form = Userform(request.POST or None) if request.method == 'POST': username=request.POST.get('username') Name=request.POST.get('Name') Date_of_Birth = request.POST.get('Date_of_Birth') Age = request.POST.get('Age') Gender = request.POST.get('Gender') Phone_no = request.POST.get('Phone_no') Mail = request.POST.get('Mail') Address = request.POST.get('Address') district_pk = request.POST.get('District') district_instance=get_object_or_404(District,pk=district_pk) # if found nothing, raise Http404. Branch = request.POST.get('Branch') Account_Type = request.POST.get('Account_Type') Materials = request.POST.get('Materials') obj=UserReg(username=username,Name=Name,Date_of_Birth=Date_of_Birth,Age=Age,Gender=Gender, Phone_no=Phone_no,Mail=Mail,Address=Address,District=district_instance,Branch=Branch,Account_Type=Account_Type,Materials=Materials) obj.save() return redirect('/') return render(request,'registration.html',{'form':form})