首页 > 其他分享 >Django 你不知道的filterset_fields和filter_fields区别

Django 你不知道的filterset_fields和filter_fields区别

时间:2024-07-25 11:39:30浏览次数:11  
标签:fields Django filter 过滤 import class filterset

filter_fieldsfilterset_fields 是 Django REST framework (DRF) 中用于过滤的两个不同概念:

filter_fields

  • 定义: 在 DRF 的 ModelViewSet 中,filter_fields 允许你指定可用于过滤的字段。
  • 用法: 你可以在视图中设置这个属性,来指定哪些字段可以用于过滤。例如,如果你有一个模型包含 nameage 字段,你可以通过设置 filter_fields = ['name', 'age'] 来允许这些字段用于过滤。
  • 示例:
    from rest_framework import viewsets
    from .models import MyModel
    from .serializers import MyModelSerializer
    
    class MyModelViewSet(viewsets.ModelViewSet):
        queryset = MyModel.objects.all()
        serializer_class = MyModelSerializer
        filter_fields = ['name', 'age']

     

filterset_fields

  • 定义: filterset_fieldsdjango-filter 库的一部分,提供了更强大的过滤功能。你可以通过 django-filter 库自定义过滤器,并使用 filterset_fields 将这些过滤器应用于你的视图。
  • 用法: 你可以在视图中设置这个属性,来指定过滤字段及其类型和行为。通常与 FilterSet 类一起使用,允许更复杂的过滤逻辑。
  • 示例:
    import django_filters
    from rest_framework import viewsets
    from .models import MyModel
    from .serializers import MyModelSerializer
    
    class MyModelFilter(django_filters.FilterSet):
        name = django_filters.CharFilter(lookup_expr='icontains')
        age = django_filters.NumberFilter()
    
        class Meta:
            model = MyModel
            fields = ['name', 'age']
    
    class MyModelViewSet(viewsets.ModelViewSet):
        queryset = MyModel.objects.all()
        serializer_class = MyModelSerializer
        filterset_class = MyModelFilter

     

总结:

  • filter_fields 是 DRF 内置的简化过滤选项,适合基本过滤需求。
  • filterset_fields 使用 django-filter 库,可以提供更复杂和自定义的过滤逻辑。

根据你的需求选择适合的方式来实现过滤功能。

标签:fields,Django,filter,过滤,import,class,filterset
From: https://www.cnblogs.com/beichengshiqiao/p/18322665

相关文章

  • Django 根据指定的数据库表生成相应的 Django 模型和注意事项
    要根据指定的数据库表生成模型,并且将这些模型放入指定的Django应用中,你可以按照以下步骤进行操作:配置数据库连接:确保你的settings.py文件中的数据库配置正确,以便Django能够连接到你的数据库。DATABASES={'default':{'ENGINE':'django.db.backends......
  • Django get_or_create和update_or_create 的作用和使用
    Djangoget_or_create和update_or_create的作用和使用:get_or_create和update_or_create是Django中的两个有用的方法,用于在数据库中获取或创建记录。如果记录不存在,则创建它们;如果存在,则返回现有记录。这两个方法帮助简化了避免重复记录的逻辑,并提供了一种简洁的方法来更新......
  • Django+Bootstrip 卡片模板设计 经典精品
    下面是一个完整的卡片模板代码,包含所有元素,并使用Django的模板语言来处理状态字段的条件渲染。同时还包括示例视图和URL配置。完整的卡片模板<divclass="card"><!--卡片图片--><imgsrc="{{product_package.image_url}}"class="card-img-top"alt="产品图片">......
  • 如何使用 Django 在 neo4j 中创建节点
    我正在开发一个网络应用程序。对于后端,我选择了Django,作为数据库,我想使用图形数据库,所以我选择了neo4j。有一个Python库neomodel用于使用neo4j和一个特定的库django_neomodel要合并|||使用Django。neomodel我可以使用Django和neo4j从......
  • Django 表单常用字段参数
    DjangoForm表单,常用表单字段-CSDN博客        在Django中,表单(Form)是用来处理HTML表单数据的重要工具。Django的表单API允许你定义表单字段及其验证规则。每个表单字段都可以通过多种参数来定制其行为。以下是一些常用的表单字段参数:label:字段的标签,用于在HTML表单......
  • js-数组内置函数-filter、map、forEach、reduce
    1、过滤数组-filter筛选数组元素,并生成新数组//过滤出分数为60分以上的数据<script>constarr=[{'name':'张三','score':80},{'name':'张六','score':50},{'name':'李四','scor......
  • 【YashanDB知识库】filter or改写问题
    问题现象当filter中出现or的时候,会导致filter无法走索引或者走hashjoin,就需要进行改写,例如:createtabletest_tab1(col1int,col2int,col3int);createtabletest_tab2(col4int,col5int,col6int);beginforiin1..10000loopinsertintotest_tab1values(i......
  • Django REST框架serializer.is_valid()将文件保存到MEDIA_ROOT,尽管.is_valid()为False
    我有一个支持通过Django表单和DjangoREST框架上传文件的项目,这些文件用于存储在模型“文档”中。问题是,当通过REST框架上传验证失败的文件时,该文件仍保存到其“upload_to”参数(MEDIA_ROOT)(未按预期创建“文档”模型实例),上传时不会发生这种情况一些测试似乎表明“ser......
  • Django 序列化程序无法将查询集序列化为 JSON
    尝试简单的Django序列化器。我使用具有特定值的queryset然后我将queryset或queryset.values()传递给序列化器。为什么会出现500错误?@csrf_protectdefgeoLookup(request,**kwargs):country=kwargs.get('Country')city=kwargs.get('Place'......
  • Django 5.0:配置本地开发和生产环境?
    这个问题已经以各种形式被问过几次。然而,关于这个主题的大多数答案都有十年或更久的历史了。我的《TwoScoops》书是针对Django3.x的。我认为更新与Django5.0相关的答案和今天可用的托管选项可能会很有用。这是我回顾过的许多旧讨论之一:Django:如何管理开......