Django过滤器按相关字段过滤 [英] Django-filter filter by related fields

查看:74
本文介绍了Django过滤器按相关字段过滤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个表。

class Writer(models.Model)
    name = model.CharField()
    ...

class Article(models.Model)
    name = model.CharField()
    writer = model.ForeignKey('Writer', related_name="relationship") 
    ...

我想构建一些API端点来获取作者列表,但这应该可以按商品ID进行过滤。
我正在使用django-filter。因此:

I wanted to build some API endpoints getting the writer list, but this should be filterable by Article id. I am using django-filter. So:

class WriterViewSet(viewsets.ReadOnlyModelViewSet):
   filter_backend = [filters.djangoFilterBackend],
   filter_class = WriterFilter


class WriteFilter(django_filters.rest_framework.FilterSet):
....

所以我关心的是,如何定义WriteFilter来按文章过滤Writer?

So my concern is, how can I define WriteFilter to filter Writer by the article?

推荐答案

class WriteFilter(django_filters.rest_framework.FilterSet):
    article = django_filters.CharFilter(name='relationship__name', lookup_expr='contains')

    class Meta:
        model = WriterFilter
        fields = ['article']



您的网址将是这样,

/ api / wtiter / list /?article = somearticlename

由于 django-filter 2.0 名称 参数更改为 field_name

因此,过滤器类别为

since django-filter 2.0, the name argument changed to field_name.

Hence the filter class will be,

class WriteFilter(django_filters.rest_framework.FilterSet):
    article = django_filters.CharFilter(field_name='relationship__name', lookup_expr='contains')

    class Meta:
        model = WriterFilter
        fields = ['article']

这篇关于Django过滤器按相关字段过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆