2015-07-21 127 views
0

我努力定义Django模型,所以我可以按照下面的图片实现以下功能:Django的数据库模型有一个字段共同

solution required

基本上,

我希望能够创造新项目(所以,我创建模型:class ProjectList)。

我想为每个项目分配阶段的通用列表,所以我创建了一个模型:class StageList。舞台列表包含每个项目名称始终相同的阶段列表。

阶段应该包含整数值,它们是区域字段的平均值。

所以,我想创建一个区域列表,并创建一个模型:class AreaList。

对于每个项目,AreaList可能不同。

重要认为最终用户希望看到的是:

阶段1(这是一个平均值)的项目1.第一阶段的值是例如区域1,区域2在项目1的平均的。

第二阶段是区域1,区域2的项目2

等的平均

我想过做的AreaList的关系如下:

area_num = models.ForeignKey(StageList, related_name='area_items') 

我意识到这不是一个好方法,因为它总是与特定的Stage in Stage列表相关,但我想为不同的阶段提供几个不同的面积值。

我该怎么办呢?

+0

“我想有几个不同的区域值的不同阶段“所以也许'models.ManyToManyField('StageList')':D ...无论如何尝试Django的教程...如果没有帮助 - 再试一次:D – madzohan

+0

区域将涉及到很多阶段,但我可以只给一个区域分配一个值,这对所有阶段都是常见的如果我按照你的建议去做。 – BlueTomato

+0

我想要有一个区域,例如与所有阶段有关的区域X例如区域X对于阶段1具有值1,对于阶段2,区域X具有值2,对于阶段3等,区域X具有值3等等......区域Z具有阶段1的值1,区域Z具有阶段2的值2 ,区域Z对于阶段3具有值3 ...阶段1是区域X和区域Z的平均值......简单的许多人不会错误?请纠正我,如果我错了。 – BlueTomato

回答

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 
相关问题