在Django中动态生成表单选项

我有一个用于在Django中提交新文章的表单,在这种形式下,您可以将帖子放入’user_group’,这只是组和用户之间的许多关系.但是,您只能将其添加到您所属的组中.使用表单类的init函数我可以传入一个额外的字段,我确实得到了我需要的正确选择,但是在提交时我得到一个错误”QueryDict’对象没有属性’all”

我不确定什么是错的,继承我的形式:

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())

我在哪里传递组的选择,这确实为您提供了正确的选择.在提交时发生错误的事实使我认为视图处理它的错误,但我不知道在哪里.

最佳答案 您需要将组传递给表单以获取GET和POST请求.目前你只是为GET请求做这件事.它应该是

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