【发布时间】:2016-11-30 12:39:27
【问题描述】:
我在保存模型表单时遇到了一个奇怪的问题。我有一个表格,它由两个模型表格组成,我试图同时保存它们。为了清楚起见,下面是我的代码
Views.py
def create_user(request):
if request.method == 'POST':
user_form = UserForm(request.POST)
my_user_form = MyUsersForm(request.POST)
if user_form.is_valid() and my_user_form.is_valid():
us = user_form.save()
my_us = my_user_form.save(commit=False)
my_us.user = us
my_us.save()
return HttpResponse('You have successfully created a user')
else:
return HttpResponse(' My_user_form is not validated')
else:
user_form = UserForm()
my_user_form = MyUsersForm(user=request.user)
return render(request, 'create_user.html', {'user_form': user_form, 'my_user_form': my_user_form})
当我覆盖 MyUsersForm 的 init 方法以过滤外键的查询集(created_by)时,my_user_form 未被验证,但是当我不过滤查询集时,my_user_form 被验证并且表单是已保存。
我不明白的是,当我不过滤查询集时,my_user_form 是如何被验证的?
通过 request.post 发送到 my_user_form 的数据以某种方式丢失(当我过滤查询集时)。任何正确方向的线索都受到高度赞赏。感谢您的宝贵意见。
Forms.py
class MyUsersForm(ModelForm):
class Meta:
model = MyUsers
fields = ['created_by', ]
def __init__(self, user=None, **kwargs):
super(MyUsersForm, self).__init__(**kwargs)
if user is not None:
self.fields['created_by'].queryset = User.objects.filter(username=user)
Models.py
class MyUsers(models.Model):
user = models.OneToOneField(User, blank=True, null=True)
created_by = models.ForeignKey(User, related_name="created_by", blank=True, null=True)
【问题讨论】:
-
未验证是什么意思?您要验证什么?
-
我正在尝试验证发送到 my_user_form = MyUsersForm(request.POST) 的数据,这基本上是一个用户对象。不幸的是,用户对象没有得到验证(即使用户在数据库中并显示在获取请求的下拉菜单中。)谢谢。
标签: django django-models django-forms django-views