我有一个用于在 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
传递给 GET
和 POST
请求的表单。目前,您只针对 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/