【问题标题】:How can I remove "multiple" attribute from django_filters form select field?如何从 django_filters 表单选择字段中删除“多个”属性?
【发布时间】:2021-10-27 18:27:05
【问题描述】:

我正在尝试使用 django-filter 为表创建过滤器表单。 我的过滤器适用于我想要的字段,但是对于我的模型中的两个 ManyToMany 文件,django_filters 正在创建一个具有多个属性的选择字段,我不希望该多个属性如何删除它?

这是我的模型(部分)

class Employee(models.Model):
    ...
    ...
    abilities = models.ManyToManyField("capa.CapaType" blank=True)
    responsibilities = models.ManyToManyField(Responsibilities, blank=True
    ...
    ...

Class Responsibilities(models.Model):
    ...
    title = models.CharField(max_length=30)
    description = models.CharField(max_length=256)
    ...

capa.CapaType 类似于项目中其他地方的角色

filter.py

import django_filters
from .models import Employee

class EmployeeFilter(django_filters.FilterSet):
    class Meta:
        model = Employee
        fields = ('abilities', 
            'responsibilities')

从我读到的其他各种堆栈溢出问题(例如 Django_filters Widget Customize)中,我应该能够在 filter.py 中设置小部件样式,但是当我在 EmployeeFilter 类中尝试类似以下内容时; responsibilities = django_filters.MultipleChoiceFilter(choices=Employee.responsibilities.all(), widget=forms.Select(attrs={'class': 'form-control'}))

我在服务器控制台中收到此错误;

AttributeError: 'ManyToManyDescriptor' object has no attribute 'all'

当我尝试加载页面时,删除“all()”会给我这个错误

'ManyToManyDescriptor' object is not iterable

有什么想法可以让这些字段不为多个吗?

谢谢

编辑

我的过滤器现在有一个非多选框,但是选项在选择时没有被标记为选中,我不知道如何解决这个问题,这就是我现在拥有的给我一个选择器的东西

responsibilities 
 = django_filters.ModelMultipleChoiceFilter(queryset=Responsibilities.objects.all(), widget=forms.Select())

【问题讨论】:

    标签: python django django-filter


    【解决方案1】:

    您需要在访问职责之前获取特定员工,例如:

    responsibilities = django_filters.MultipleChoiceFilter(choices=Employee.objects.get(pk=1).responsibilities.all(), widget=forms.Select(attrs={'class': 'form-control'}))
    

    但这没什么用,你可以这样写:

    responsibilities = django_filters.MultipleChoiceFilter(choices=Responsibilities.objects.all(), widget=forms.Select(attrs={'class': 'form-control'}))
    

    您可以过滤查询集,而不是 Responsibilities.objects.all()

    【讨论】:

    • 感谢您的回答。这在一定程度上有效,我已经更新了我的问题以包含有效的示例,但它现在给了我一个很棒的非多重选择器,但是当你在网页中选择它时它不会在任何选项上设置选择属性,知道这里会发生什么吗?我的另一个问题是您说“您可以过滤查询集,而不是 Responsibilities.objects.all()。”您能否更新您的答案以举例说明它的外观?我试过玩,但没有运气
    • 没关系,问题是样式而不是 django-filter。标记为正确,因为它给了我我要求的单选。
    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    相关资源
    最近更新 更多