【发布时间】:2021-03-25 09:19:26
【问题描述】:
我有三个模型
class Records(Model):
plan = models.ForeignKey(Plan, on_delete=models.CASCADE,
related_name="records_plan", null=True)
observation = models.CharField(max_length=255, blank=True)
description = models.TextField(null=True, blank=True)
rating = models.CharField(max_length=255, blank=True)
class Plan(Model):
plan_title = models.CharField(max_length=255, blank=True)
plan_size = models.ForeignKey(Size, on_delete=models.CASCADE,
related_name="%(class)s_size", null=True)
description = models.TextField(null=True, blank=True)
class Size(Model):
value = models.CharField(max_length=255, blank=True)
order = models.CharField(max_length=255, blank=True)
在此我需要根据计划的大小绘制计划图表
我的初始查询集是
qs = Plan.objects.values('plan_size__value').annotate(
count=Count('plan_size__value'),
).order_by("-plan_size__order").distinct()
使用这个查询我可以得到一个带有数据和字段的查询集
我想在代码的后期应用过滤器的相同查询集
qs = qs.filter(records_plan__rating = 'low')
在这种情况下,我得到了输出,但是值是重复的(例如,如果一个计划有两个记录,我的图表需要将其视为一个计划,但这里它是两个计划),如何解决这个问题
或者如何在使用记录模型过滤计划时获得计划的独特价值
【问题讨论】:
-
.annotate(..)Size模型不是更有意义吗? -
是的,标注plan_size__value plan_size是Plan模型到Size模型的外键字段名,Size模型值是Size模型中的值
标签: django django-views django-orm