Ошибка внешнего ключа При отправке форм

Я создал модель и она содержит поля с внешним ключом, но когда я пытаюсь отправить, она показывает ошибку, говоря, что число не может быть назначено полю, где назначен внешний ключ. Как я могу загрузить имя. Картинка ошибки как ниже картинка

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})
Вернуться на верх