尝试保存表单时出现完整性错误,"field may not be NULL"



我在其中一个基于类的视图中进行了此操作:

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的建议

而不是:

    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()

希望这些有帮助!

您的表单处理有点不正确,您应该这样做:

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'))

相关内容

最新更新