我正在努力定义Django模型,因此我可以按照下图实现以下功能:
基本上,
我希望能够创建新项目(因此,我创建模型:类ProjectList)。
我想为每个项目分配通用的阶段列表,因此我创建了一个模型:class StageList。阶段列表包含每个项目的名称始终相同的阶段列表。
阶段应包含整数值,这些值是“区域”字段的平均值。
所以,我想创建一个区域列表,然后创建一个模型:class AreaList。
每个项目的AreaList可能不同。
最终用户想要看到的重要思想是:
项目1的阶段1(平均值)的值。阶段1是项目1中区域1,区域2的平均值。
阶段2是项目2中的区域1,区域2的平均值
等
我考虑过为AreaList做一个关系,如下所示:
area_num = models.ForeignKey(StageList, related_name='area_items')
我意识到这不是一个好方法,因为它总是与舞台列表中的特定舞台有关,但我想为不同的舞台设置几个不同的区域值。
我怎么能这样做?
答案 0 :(得分:0)
我相信你正在寻找的是:
class Project(models.Model):
pass
class Stage(models.Model):
pass
class Area(models.Model):
project = models.ForeignKey(Project)
stage = models.ForeignKey(Stage)
value = models.IntegerField()
然后,要获得您的舞台价值,您可以执行以下操作:
from django.db.models import Avg
project = Project.objects.get(...)
project_stages = Stage.objects.filter(
area_set__project=project
).annotate(
stage_value=Avg('area_set__value')
)
for project_stage in project_stages:
print project_stage.stage_value