2017-04-25 30 views
4

我有一個在Django中提交新文章的表單,在這種形式下,您可以將該文章放置到'user_group'中,這只是組和用戶之間的許多關係。但是,您只能將其添加到您所屬的組中。使用表單類i的init函數可以傳遞額外的字段,並且我確實得到了我需要的正確選擇,但是在提交時我得到一個錯誤''QueryDict'對象沒有屬性'all''在Django中動態生成的表單選擇

I也不太清楚怎麼回事錯了,我的繼承人形式:

class PostForm(BaseModelForm): 
new_image = forms.ImageField(required=False) 
#GROUPS = user.groups.all() 
#group = forms.ChoiceField(choices=GROUPS, required=False) 

def __init__(self,groups, *args, **kwargs): 
    super(PostForm, self).__init__(*args, **kwargs) 
    self.fields['group'].queryset = groups 

    class Meta: 
     model = Post 
     fields = ('title','category', 'group', 'text', 'description', 'style') 

     help_texts = { 
      'group': _('Do you want this published under your account or a group?') 
     } 

和繼承人在那裏被拋出的錯誤觀點:

@login_required 
def post_new(request): 
    if request.method == "POST": 
     form = PostForm(request.POST, request.FILES) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.author = request.user 
      post.save() 
      return redirect('post_detail', pk=post.pk) 
    else: 
     form = PostForm(groups=request.user.user_groups.all()) 
    return render(request, 'blog/post_edit.html', {'form': form}) 

這條線:

form = PostForm(groups=request.user.user_groups.all()) 

是我在哪裏通過團體的選擇,這會給你正確的選擇。錯誤發生在提交的事實使我認爲它是一個視圖如何處理它的錯誤,但林不知道在哪裏。

+1

請修復縮進。具體而言,「類Meta」是否應該嵌套在「類PostForm」內部還不清楚。 – mkrieger1

+0

您的模型窗體應該繼承'models.ModelForm',而不是'BaseModelForm'。 – Alasdair

+0

BaseModelForm是我用來將引導類添加到表單的擴展 –

回答

1

您需要將groups傳遞給GET和請求的格式。目前,你只是在做GET請求。它應該是

if request.method == "POST": 
    form = PostForm(request.user.user_groups.all(), request.POST, request.FILES) 
    ... 
+0

這實際上會引發語法錯誤 –

+0

我修復了語法錯誤 – Alasdair

+0

我認爲這個技巧與其他答案結合在一起。 –

1

我認爲你要查詢的形式組:

class PostForm(models.ModelForm): 
    group = forms.ChoiceField(queryset = None) 

    def __init__(self,groups, *args, **kwargs): 
     super(PostForm, self).__init__(*args, **kwargs) 
     self.fields['group'].queryset = request.user.user_groups.all() 

https://docs.djangoproject.com/en/1.11/ref/forms/fields/#fields-which-handle-relationships

它來定義查詢集如無非常重要,而在__init__進行查詢時表單實例被創建。

+0

嘗試此解決方案我仍然得到與以前相同的queryset錯誤 –