我有两个查询集,我想加入,但我不确定如何继续。我想根据在每个查询集中创建的两个注释过滤数据
模型
class Recipe(models.Model):
name = models.CharField(max_length=50)
steps = models.ManyToManyField(StepRecipe)
class StepRecipe(models.Model):
ingredients = models.ManyToManyField(RecipeIngredient)
class RecipeIngredient(models.Model):
ingredient = models.ForeignKey(Ingredient)
class Ingredient(models.Model):
name = models.CharField(max_length=50)
分步查询
^{pr2}$我想合并两个结果并在最后按.filter(total=F('sum'))
进行筛选。过滤后,这将导致只显示ID为2的对象,因为total=4,available=4。
我知道我有|
运算符。我得做点什么:
result = q1 | q2
但是每当我这样做时,其中一个注释就会消失(最后一个,在本例中是q2注释,它是available
)。有什么想法吗?如果数据库能做到这一点,我不想迭代它们。在
奇怪的是,有时候当我把所有的东西放在一行时,它常常会给我预期的结果。我觉得这可能是个虫子。我想它以某种方式缓存了结果。。。在
这就是我所做的,并且几次都是正确的结果:
queryset = Recipe.objects.all()
.annotate(total=Count('steps__ingredients', distinct=True))
.filter(steps__ingredients__ingredient__name__in=ingredients)
.annotate(sum=Count('steps__ingredients', distinct=True))
.filter(total=F('sum'))
我使用的是MySQL 5.6和Django 1.11
我试图使用.intersection()
,这是django1.11中的新功能,但它也不起作用(我的数据库显然不支持)。我考虑过使用.union()
,但是这个函数也发生了同样的事情:一个注释消失了。虽然,有一个消失了,我想我可以看到任何出现两次的东西,然后过滤掉。但是。。。又是一个错误!当我试图注释时,我得到了IndexError: list index out of range
如果有一个更好的主意(不是迭代)或者一个好的方法来解决这个问题,我会很感激的。谢谢!在
这是Django的一个bug,正在修复https://code.djangoproject.com/ticket/28297
相关问题 更多 >
编程相关推荐