2017-04-25 28 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错误 –