2016-11-30 76 views
0

保存模型表单时出现了一个奇怪的问题。我有一个表单,它由两个模型表单组成,我试图同时保存它们。为了清楚起见,下面是我的代码ModelType中的ForeignKey上的Queryset过滤

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的初始化方法来筛选外键的查询集(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) 
+0

你是什么意思未经验证?你想要验证什么? – Sayse

+0

我想验证发送到my_user_form = MyUsersForm(request.POST)的数据,它基本上是一个用户对象。不幸的是,用户对象没有得到验证(即使用户在数据库中并显示在获取请求的下拉菜单中)。谢谢。 –

回答

0

为什么my_user_form未通过验证并保存。而不是在初始化修改查询集我做到了在视图本身使用语句

my_user_form.fields['created_by'] = forms.ModelChoiceField(User.objects.filter(username=request.user)) 

,这解决了我的问题。但我仍然不知道为什么它在MyUsersForm的init方法中不起作用?

0
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() and User.objects.filter(username=request.POST.get('user')).exists(): 
      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}) 
+0

您可以编写一个干净的方法或在您可以检查的视图中 –

+0

User.objects.filter(username = request.POST.get('user'))。exists()只检查用户是否在数据库中。在我的情况下,用户是数据库,他被认证来执行他的任务。有关编写干净方法的任何输入? –

+0

在你的表格你可以写一个干净的方法来验证 –