我有一个用于在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)
...