django ModelMultipleChiceField已关联对象的查询集/过滤器

django ModelMultipleChiceField已关联对象的查询集/过滤器,django,forms,filter,django-queryset,Django,Forms,Filter,Django Queryset,我有一个与类别有很多关系的概要文件对象 class Profile(models.Model): . . . category = models.ManyToManyField(Category, blank=True) 在我的表单中,我只想显示一个与概要文件关联的类别的复选框 下面的代码将显示所有类别 class ProfileForm(ModelForm): . . . category = forms.ModelMultipleChoiceField

我有一个与类别有很多关系的概要文件对象


class Profile(models.Model):
    . . . 
    category = models.ManyToManyField(Category, blank=True)
在我的表单中,我只想显示一个与概要文件关联的类别的复选框 下面的代码将显示所有类别


class ProfileForm(ModelForm):
    . . .
    category = forms.ModelMultipleChoiceField(Category.objects.all(),
                  widget=forms.CheckboxSelectMultiple())
如何编写查询集,以便仅显示与概要文件关联的类别? 我有以下几种:


    category = forms.ModelMultipleChoiceField(Category.objects.filter(id__in=Profile.category.all()), widget=forms.CheckboxSelectMultiple())

有此错误:“ReverseManyRelatedObjectsDescriptor”对象没有属性“all”

据我所知,关系“category”只能从概要文件实例(提供关联的类别)关联,而不能从类概要文件本身关联。这就是为什么您会收到错误消息

如果您将示例中的概要文件替换为实际的概要文件实例(我读到的是您实际尝试实现的),它会工作得更好

category=forms.ModelMultipleChoiceField(
    Category.objects.filter(id__in=your_profile_instance.category.all()),
    widget=forms.CheckboxSelectMultiple()
)
或者只是

category=forms.ModelMultipleChoiceField(
    queryset=your_profile_instance.category.all()),
    widget=forms.CheckboxSelectMultiple()
)

我是否正确理解了你的问题?

woa这是10年前提出的问题。但是,我的想法可能会对正在审查这一问题的开发人员有用。我也遇到过类似的挑战

简单的方法是注释掉以下内容:

#category=forms.ModelMultipleChoiceField(
#    Category.objects.filter(id__in=your_profile_instance.category.all()),
#    widget=forms.CheckboxSelectMultiple()
#)
lol,然后在下面列出字段后添加:

widgets = {
     'category': forms.CheckboxSelectMultiple,
    }
是的


Nevermind:我必须在视图中定义查询集。I gues sit与运行时变量form.fields[“category”].queryset=category.objects.filter(profile=profile)有关,并且在视图中可以进行如下筛选: