【发布时间】:2023-03-25 12:56:01
【问题描述】:
我正在尝试查找具有 tags 中包含的所有标签的 Problem 对象。
我有以下型号。
class Tag(models.Model):
name = models.CharField(verbose_name='Tag Name', max_length=50)
description = models.CharField(verbose_name='Description', max_length=100, null=True, blank=True)
class Problem(models.Model):
name = models.CharField(verbose_name='Problem Name', max_length=250)
contest_info = models.ManyToManyField(ContestInfo, verbose_name='Contest Info')
tags = models.ManyToManyField(Tag, verbose_name='Tags')
我关注了这些帖子:Post-1 和 Post-2。
但是,没有一个有效。
我的方法。
方法 1
query = [Q(tags__id__in=[tag]) for tag in tags]
problems = problems.filter(reduce(__and__, query))
返回空查询集。
方法 2
for tag in tags:
problems &= problems.filter(tags__id__in=[tag])
返回 OR 的结果而不是 AND。
使用intersection() 也会得到相同的结果。
我想解决列表中包含所有标签的问题。如何做到这一点?
注意:problems 是一个查询集,tags 是 Tag 对象的 ID 列表。
【问题讨论】:
-
使用postgresql?
-
@Basalex 是的。我用的是postgresql。
-
@itzMEonTV 谢谢。这帮助并解决了问题。 :D
标签: python django many-to-many django-queryset