2016-11-30 75 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

在你的表格你可以寫一個乾淨的方法來驗證 –