【问题标题】:Filtering by multiple values of the same field按同一字段的多个值过滤
【发布时间】:2021-12-30 05:59:59
【问题描述】:

我有以下模型、视图集和过滤器集。

class Contact(models.Model):
    PERSON = 'PERSON'
    ORGANIZATION = 'ORGANIZATION'
    COMPANY = 'COMPANY'
    TYPES = (
        (PERSON, 'Person'),
        (ORGANIZATION, 'Organization'),
        (COMPANY, 'Company'),
    )
    # irrelevant fields removed
    type = models.CharField(max_length=50, choices=TYPES, null=True)

class ContactViewSet(CustomViewSet):
    model = models.Contact
    read_serializer_class = serializers.ContactReadSerializer
    write_serializer_class = serializers.ContactWriteSerializer
    model_name = 'contact'
    filterset_class = filtersets.ContactFilterSet
    filter_backends = (filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend)
CONTACT_TYPE_CHOICES = (
    'PERSON',
    'COMPANY',
    'ORGANIZATION'
)
class ContactFilterSet(FilterSet):
    # irrelevant fields removed
    type= CharFilter(
        choices=CONTACT_TYPE_CHOICES,
        field_name='type',
        lookup_expr='in'
    )
    class Meta:
        model = models.Contact
        fields = ('related_contacts', 'type', 'subtype', 'archived', 'legal_files', 'events', 'expenses', 'invoices', 'notes')

我想按类型过滤联系人。例如,我希望我的查询对type == 'PERSON' or 'COMPANY' 的所有联系人进行响应理论上,正如我理解的django-filter reference 一样,我应该能够使用/contacts?type=PERSON&type=COMPANY 之类的查询来做到这一点。但是,这会返回匹配最右边查询的联系人(在本例中为 type=COMPANY

我做错了什么?我是不是完全用错了方法?

【问题讨论】:

    标签: django-rest-framework django-filter


    【解决方案1】:

    也许是这个?

    type = MultipleChoiceFilter(choices=CONTACT_TYPE_CHOICES)
    

    field_name='type' 也是不必要的,因为它与过滤器字段名称相同。

    【讨论】:

    • 这样就可以了。谢谢!
    • @IraRamírez 不客气!
    猜你喜欢
    • 2018-01-27
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多