模型形式没有保存在 Django 中,它告诉用户不能为空

model form is not saving in django it is telling user can not be nul

我创建了一个模型名称地址并通过外键与用户连接,这样用户可以有多个地址,但它没有保存我希望表单采用该用户 ID 进行保存,但我不知道该怎么做

这是我的 models.py

class Address(models.Model):
    phoneNumberRegex = RegexValidator(regex = r"^\d{10,10}$")
    pincodeRegex = RegexValidator(regex = r"^\d{6,6}$")
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address')
    reciever_name = models.CharField(max_length=200, blank=False)
    phone_no = models.CharField(validators = [phoneNumberRegex], max_length = 10, blank=False)
    alt_phone_no = models.CharField(validators = [phoneNumberRegex], max_length = 10, blank=True)
    state = models.CharField(max_length=50, choices=state_choice, blank=False)
    pincode = models.CharField(validators = [pincodeRegex], max_length = 6, blank=False)
    eighteen = models.CharField(blank=False, choices=eighteen_choice, default='Yes', max_length=4 )
    city = models.CharField(max_length=100, blank=False)
    address = models.CharField(max_length=500, blank=False)
    locality = models.CharField(max_length=300, blank=True)
    joined_date = models.DateTimeField(default=timezone.now,editable=False)
    update_at = models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.user.username 

我的views.py

@login_required
def add_address(request, username):
    if request.method == 'POST':
        form = Addressform(request.POST)
        if form.is_valid():
            form.save()
            return redirect('accounts:home')
    else:
        form = Addressform()
    return render(request, 'add_address.html', {'form': form})

我的form.py

class Addressform(forms.ModelForm):
    class Meta:
        model = Address
        fields = '__all__'
        exclude = ['user', 'joined_date', 'updated_at']
        labels = {
            'reciever_name':'Reciever Name',
            'phone_no':'Phone No',
            'alt_phone_no':'Alternate Phone No',
            'state':'State/Union Territory',
            'pincode':'Area Pincode',
            'eighteen':'Is reciever is 18+',
            'city':'City',
            'address':'Address',
            'locality':'Locality',
        }
        widgets = {
            'eighteen': forms.RadioSelect()
        }

我想要的是在用户字段中自动获取他登录的用户,但我不明白如何实现

由于您从表单中排除了用户字段,因此它在 post 请求中得到一个空值。使用外键,数据库中不能有空字段。您有 2 个选择:

1) 添加请求用户

    @login_required
def add_address(request, username):
    if request.method == 'POST':
        form = Addressform(request.POST)
        if form.is_valid():
            form = form.save(commit=False)
            form.user = request.user
            form.save(commit=True)
            return redirect('accounts:home')
    else:
        form = Addressform()
    return render(request, 'add_address.html', {'form': form})

这会将提交表单的用户的主键添加为地址的外键,从而将用户与地址相关联。

2)允许用户select用户与地址关联(不建议)

另一种方法是允许用户 select 您要将其与地址相关联的用户,但不建议这样做,因为任何用户都可以将任何用户与特定地址相关联。

class Addressform(forms.ModelForm):
    class Meta:
        model = Address
        fields = '__all__'
        exclude = ['joined_date', 'updated_at']
        labels = {
            'reciever_name':'Reciever Name',
            'phone_no':'Phone No',
            'alt_phone_no':'Alternate Phone No',
            'state':'State/Union Territory',
            'pincode':'Area Pincode',
            'eighteen':'Is reciever is 18+',
            'city':'City',
            'address':'Address',
            'locality':'Locality',
        }
        widgets = {
            'eighteen': forms.RadioSelect()
        }