在Django中,我有一个用于提交新文章的表单。在此表单中,您可以将文章放置在“用户组”中,这只是组和用户之间的多对多关系。但是,您只能将其添加到属于您所属的组中。使用表单类的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?')
}
以下是出错的视图:
@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())
这里是我传入组选项的位置,它确实给出了正确的选项。错误发生在提交时使我想到视图处理它的方式有误,但我不确定具体在哪个环节出错了。
class Meta
是否应该嵌套在class PostForm
中。 - mkrieger1models.ModelForm
,而不是BaseModelForm
。 - AlasdairBaseModelForm
,你不应该使用它。 - Alasdair