python - Django 中动态生成的表单选择

标签 python django forms

我有一个用于在 Django 中提交新文章的表单,在这个表单中,您可以将帖子放入“user_group”中,这只是组和用户之间的许多关系。但是,您只能将其添加到您所属的组中。使用表单类的 init 函数我可以传入一个额外的字段,我确实得到了我需要的正确选择,但是在提交时我得到一个错误 ''QueryDict' object has no attribute '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?')
        }

下面是抛出错误的 View :

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

是我传递组选择的地方,它确实为您提供了正确的选择。提交时发生错误这一事实让我认为它是 View 处理错误的方式,但我不确定在哪里。

最佳答案

您需要将 groups 传递给 GETPOST 请求的表单。目前,您只针对 GET 请求执行此操作。应该是

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

关于python - Django 中动态生成的表单选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43611648/

相关文章:

python - 模板中的django url添加参数的正确方法

css - 单击移动键盘提交/转到按钮后隐藏表单

javascript - jquery/JS 只允许文本字段中的数字和字母

Python urllib3 urlopen 不使用特定错误的重试

Python成语链接(展平)有限迭代的无限迭代?

python - 如何将 Django 模型元选项应用于我未编写的模型?

forms - 有什么方法可以通过 NOT REQUIRED v-text-field 规则的验证吗?

python - 使用 python tarfile 备份 postgresql 数据目录。预期/忽略哪些错误

python - 基于主题的推荐系统的用户画像

python - APIView 上的 django 过滤器