Python Django';s计数与关系跨度
以下是相关模型:Python Django';s计数与关系跨度,python,django,count,Python,Django,Count,以下是相关模型: 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 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")
我会解释这一点,每个WhatToWear候选人都有一个StyleLook和个人资料,对于每个个人资料,我们会向他们展示正确的外观。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'))
从调试器将所有候选对象打印到[{'look\u id':15L,'lcount':1}]
。我知道这个外观包含6种产品,所以我希望L数量等于6
为了再次检查,我尝试了一个类似的查询,取而代之的是StyleLook
StyleLook.objects.filter(id__in=[15]).values('id').annotate(lcount=Count('lookitems'))
这将返回[{'id':15L,'lcount':6}]
我做错了什么?如何使lcount
在WhatToWearCandidates
查询中等于6?我想您可能在某个型号中遇到了问题。尝试将.order\u by()
添加到查询的末尾:
all_candidates = WhatToWearCandidates.objects.filter(
look__lookitems__item__assignment=assignment.id,
profile_id=1,
).values('look_id').annotate(lcount=Count('look__lookitems')).order_by()
我想你可能在你的一个模型中遇到了问题。尝试将.order\u by()
添加到查询的末尾:
all_candidates = WhatToWearCandidates.objects.filter(
look__lookitems__item__assignment=assignment.id,
profile_id=1,
).values('look_id').annotate(lcount=Count('look__lookitems')).order_by()
我最终重新设计了如何访问我想要的数据。我最终重新设计了如何访问我想要的数据。