您好我正在尝试注册一个有地址的用户。我正在尝试使用http://django-angular.readthedocs.org/
生成表单# models.py
class Address(models.Model):
user = models.ForeignKey(User)
line_1 = models.CharField(max_length=256, null=True, blank=True)
...
# forms.py
class AddressForm(NgFormValidationMixin, Bootstrap3FormMixin, NgModelForm):
class Meta:
model = Address
fields = ('line_1','city', 'state', 'user')
# exclude = ('user',) #this line
# views.py
class Register(APIView):
def post(self, request):
...
if userform.is_valid():
user = userform.save()
address = request.data['address']
address['user'] = user.id
addressform = AddressForm(address)
if addressform.is_valid():
addressform.save() # gives error here if I add exclude('user', ) in form
# else
# revert the changes
# else
# revert the changes
如果我生成表格为
AddressForm().as_div()
它获取所有用户详细信息,并且可以作为注册用户的下拉列表使用。 (大不)
所以我将exclude = ('user',)
添加到表单中。然后,AddressForm在我的视图中提出错误,IntegrityError: accounts_address.user_id may not be NULL
如何在模板和模板中使用相同的表单查看?
答案 0 :(得分:2)
这与form.as_div()
无关,或与“在模板和视图中使用相同的表单”无关。
如果排除字段,将其添加到表单数据将无效,正是因为您已明确排除它。您应该只从POST数据中实例化它们,而不是保存一个表单并将结果放入数据中以实例化第二个表单,但是在地址表单上使用commit=False
保存以获取可以在保存之前操作的对象db。
def post(self, request):
...
if userform.is_valid() and addressform.is_valid():
user = userform.save()
address = addressform.save(commit=False)
address.user = user
address.save()
...
这样您也无需担心回滚更改。