保存表单时出现完整性错误,“字段不能为空”

0 投票
2 回答
723 浏览
提问于 2025-04-18 08:32

我在一个基于类的视图中遇到了这个问题:

if form.is_valid():
            form.save(commit=False)
            form.manager = User.objects.get(username=request.user.username)
            form.save()
            location = Location.objects.get(name=form.cleaned_data['name'])
            user.get_profile().owned_locations.add(location)
            return redirect(reverse('location_manager'))

但是当我填写表单时,却出现了以下错误:

IntegrityError at /dash/location/add
locationmanager_location.manager_id may not be NULL

这很奇怪,因为我的地点模型看起来是这样的:

class Location(models.Model):
    region = models.ForeignKey(Region)
    manager = models.ForeignKey(User)
    name = models.CharField(max_length=255)
    street_address = models.TextField(blank=True)
    city = models.CharField(max_length=255, blank=True)
    zip_code = models.CharField(max_length=20, blank=True)

而我的Forms.py文件是这样的:

class locationForm(forms.ModelForm):
    class Meta:
        model = Location
        fields = (
            'region',
            'name',
            'street_address',
            'city',
            'zip_code',

        )
        exclude =('manager',)

我似乎搞不清楚这里的问题出在哪里。如果你想知道我为什么要排除某些内容,我是按照Daniel Roseman的建议来做的,具体可以参考这里

2 个回答

2

你的表单处理有点不对,应该这样做:

if form.is_valid():
            instance = form.save(commit=False)
            instance.manager = User.objects.get(username=request.user.username)
            instance.save()
            location = Location.objects.get(name=form.cleaned_data['name'])
            user.get_profile().owned_locations.add(location)
            return redirect(reverse('location_manager'))
3

不要这样做:

    form.save(commit=False)
    form.manager = User.objects.get(username=request.user.username)
    form.save()

试试这样:

    obj = form.save(commit=False)
    obj.manager = User.objects.get(username=request.user.username)
    obj.save()

希望这些对你有帮助!

撰写回答