django filter查询多选_Django过滤查询集__in为列表中的* every *项

本文介绍了在Django中如何使用filter查询多选标签,包括使用__in操作符、聚合方法和自定义查询。通过示例展示了不同方法的实现和查询效果,对比了它们的性能和适用场景。
摘要由CSDN通过智能技术生成

摘要:

正如jpic和sgallen在评论中所建议的那样,一个选项是.filter()为每个类别添加。每个附加项都会filter添加更多联接,这对于一小组类别来说应该不是问题。

有聚合 方法。对于大量类别,此查询将更短并且可能更快。

您还可以选择使用自定义查询。

一些例子

测试设置:class Photo(models.Model):

tags = models.ManyToManyField('Tag')class Tag(models.Model):

name = models.CharField(max_length=50)

def __unicode__(self):

return self.nameIn [2]: t1 = Tag.objects.create(name='holiday')In [3]: t2 = Tag.objects.create(name='summer')In [4]: p = Photo.objects.create()In [5]: p.tags.add(t1)In [6]: p.tags.add(t2)In [7]: p.tags.all()Out[7]: [, ]

使用链式过滤器方法:In [8]: Photo.objects.filter(tags=t1).filter(tags=t2)Out[8]: []

结果查询:In [17]: print Photo.objects.filter(tags=t1).filter(tags=t2).query

SELECT "test_photo"."id"FROM "test_photo"INNER JOIN &#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值