django filter查询多选_Django:使用filter的pk进行多值查询操作

由于想要做收藏夹的功能,所以希望能够一次性查询出所有id的对象,查看文档,找到了如下方法

pk是primary key的缩写,顾名思义pk_in就是primary key在某一个范围内,具体操作(以自带的User为例):

User.objects.filter(pk__in=[1,2,3])

这样就可以去除id为1,2,3的User的对象了,很方便

注意是两个下划线

另外,还要pk__gt和pl_lt,都用于筛选范围的

User.objects.filter(pk__gt=10)

意味着将要得到pk(一般也就是说id)大于10的对象(greater)

User.objects.filter(pk__lt=10)

意味着将要得到pk小于10的对象

补充知识:Django 比较同一个model中的两个字段,进行条件过滤

django orm中怎么样比较同一个模型中的两个字段来过滤记录呢?

例如一个合同字段,结束日期和终止日期的比较我们用sql很容易实现。

select *from contracts where

contract_stop_time

这里要是用db模块中的F 库才行 F object

from django.db.models import F

from contracts.models import Contracts

contracts = Contracts.objects.filter(contract_stop_time__lt=F('end_time'))

如果直接写成

Contracts.objects.filter(contract_stop_time__lt=end_time)

或者

Contracts.objects.filter("contract_stop_time"

都是不行的。

以上这篇Django:使用filter的pk进行多值查询操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持随便开发网。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: django_filter可以通过定义FilterSet来实现关联表模糊查询。首先需要在FilterSet中定义关联表的字段,然后使用lookup_expr参数指定查询方式为icontains,即模糊查询。例如: ```python from django_filters import FilterSet, CharFilter from myapp.models import Book, Author class BookFilter(FilterSet): author_name = CharFilter(field_name='author__name', lookup_expr='icontains') class Meta: model = Book fields = ['title', 'author_name'] ``` 在上面的例子中,我们定义了一个BookFilter,其中author_name是一个CharFilter,它的field_name指定了关联表Author的name字段,lookup_expr指定了查询方式为icontains。这样,我们就可以通过BookFilter来实现对Book模型关联的Author模型的name字段进行模糊查询了。 ### 回答2: django_filterDjango 框架中的一个用于过滤查询结果的插件,它可以帮助我们方便地进行查询,其中涉及到了关联表模糊查询。 在 Django 中,我们经常会用到关联表查询,即通过一个模型的外键或多对多关系查询到另一个模型的记录。而在这种情况下,我们有时需要进行模糊查询,比如查询与某个用户相关的所有记录,或者查询某个标签下的所有记录。 使用 django_filter 进行关联表模糊查询时,我们需要先通过模型的外键或多对多关系进行链接,然后再进行过滤。例如: ```python from django_filters import rest_framework as filters from myapp.models import Book, Author, Genre class BookFilter(filters.FilterSet): author = filters.CharFilter(field_name='author__name', lookup_expr='icontains') genre = filters.CharFilter(field_name='genre__name', lookup_expr='icontains') class Meta: model = Book fields = ['title', 'author', 'genre'] ``` 在上面的代码中,我们创建了一个 BookFilter 的类,其中定义了两个字段:author 和 genre。这两个字段都是关联表字段,通过 author__name 和 genre__name 进行链接,然后使用 icontains 进行模糊查询。 在使用时,我们可以像下面这样使用该过滤器: ```python from myapp.models import Book from myapp.filters import BookFilter from rest_framework import generics class BookList(generics.ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer filter_class = BookFilter ``` 在上面的代码中,我们使用了 BookFilter 进行过滤,然后在 BookList 视图中指定了 filter_class 属性为 BookFilter,这样就可以使用该过滤器进行查询了。 总之,django_filter 插件使得进行关联表模糊查询变得非常简单,只需要通过链接关联模型的外键或多对多关系,然后使用 filters.CharFilter 等过滤器即可轻松实现。 ### 回答3: Django_filterDjango的第三方插件,提供了一种简单而方便的方法,可在Django模型中执行常见的查询过滤操作。它可以帮助您轻松过滤查询结果,从而更快,更有效地完成开发任务。 对于关联表模糊查询django_filter可以使用__来连接模型的字段,以实现高效过滤。例如,如果您有两个相关模型,如“Topic”和“Post”,并且您想要在主题模型中查找特定作者写的帖子,则可以使用以下方法: ```python from django_filters import rest_framework as filters from .models import Topic, Post class TopicFilter(filters.FilterSet): author = filters.CharFilter(field_name='posts__author__username', lookup_expr='icontains') class Meta: model = Topic fields = ['author'] ``` 可以看到,在这个例子中,我们为topic模型创建了一个TopicFilter类。我们在“author”字段中使用了CharFilter过滤器,并将其连接到“posts__author__username”字段。此字段与“Post”模型的“author”字段相关联,而且,“author”又与“User”模型的“username”字段相关联。这种嵌套的关系将允许我们找到所有属于特定作者的帖子,这些帖子又属于某个主题。 最后,我们指定了“lookup_expr”参数为“icontains”,这意味着我们正在执行模糊查询。现在,当我们使用类似于以下代码的内容时,我们将能够轻松地获得我们想要的结果: ```python topics = Topic.objects.all() filtered_topics = TopicFilter(request.GET, queryset=topics).qs ``` 总之,django_filter是一种很好的过滤器工具,特别是在处理关联表时。它提供了高效的查询过滤项,使得开发者能够更快地编写代码,同时更加轻松地调整和维护他们的Django应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值