以下是相关型号:
class WhatToWearCandidates(models.Model):
profile = models.ForeignKey(Profile, null=False, blank=False, related_name="outfit_candidates")
look = models.ForeignKey(StyleLook, null=False, blank=False, related_name="outfit_candidates")
class StyleLook(models.Model):
# Non important attributes
class LookItem(models.Model):
look = models.ForeignKey(StyleLook, null=False, blank=False, related_name="lookitems")
item = models.ForeignKey(Product, null=False, blank=False, related_name="looks")
我来解释一下,每个WhatToWearCandidates都有一个StyleLook和Profile,对于每个Profile,我们向他们展示正确的外观。StyleLook只包含了关于它本身的细节。你知道吗
每个StyleLook都由产品组成,在表LookItem中我们连接哪些StyleLooks包含哪些产品。你知道吗
问题:我正在尝试有效地收集包含4种或更少产品的WhatToWear候选者。你知道吗
我正在尝试使用django的annotate()
类
all_candidates = WhatToWearCandidates.objects.filter(
look__lookitems__item__assignment=assignment.id, # This is to filter based on Products that belong in the current Assignment
profile_id=1, # Example profile
look_id=15 # Testing with 1 single look for the proper profile
).values('look_id').annotate(lcount=Count('look__lookitems'))
从调试器all_candidates
打印到[{'look__id': 15L, 'lcount': 1}]
。我知道这个外观包含6个产品,所以我希望lcount等于6。你知道吗
为了再次检查,我尝试了一个类似的查询,取而代之的是StyleLook
。你知道吗
StyleLook.objects.filter(id__in=[15]).values('id').annotate(lcount=Count('lookitems'))
返回[{'id': 15L, 'lcount': 6}]
。你知道吗
我做错什么了?如何在WhatToWearCandidates
查询中使lcount
等于6?你知道吗
我认为您可能在某个模型中遇到了default ordering问题。尝试将
.order_by()
添加到查询末尾:相关问题 更多 >
编程相关推荐