保存表单时出现完整性错误,“字段不能为空”
我在一个基于类的视图中遇到了这个问题:
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()
希望这些对你有帮助!