【问题标题】:django database models with one field common具有一个通用字段的 django 数据库模型
【发布时间】:2015-10-11 11:39:18
【问题描述】:

我正在努力定义 Django 模型,因此我可以实现如下图所示的以下功能:

基本上,

我希望能够创建新项目(因此,我创建模型:类 ProjectList)。

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

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

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

每个项目的区域列表可能不同。

最终用户希望看到的重要想法是:

项目 1 的阶段 1 的值(平均值)。阶段 1 是例如项目 1 中的区域 1、区域 2 的平均值。

第 2 阶段是项目 2 中区域 1、区域 2 的平均值

等等

我想过为 AreaList 做如下关系:

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

我意识到这不是一个好方法,因为它总是与阶段列表中的特定阶段相关,但我希望不同阶段的不同区域值很少。

我该怎么做?

【问题讨论】:

  • “我想为不同的阶段设置几个不同的区域值”所以也许 models.ManyToManyField('StageList') :D ...无论如何尝试 django 教程 ...如果没有帮助 - 再试一次 :D
  • 区域将与许多阶段相关,但我只能为区域分配一个值,如果我按照您的建议进行操作,它将适用于所有阶段。
  • 我想要一个区域,例如与所有阶段相关的区域 X,例如区域 X 的第 1 阶段的值为 1,区域 X 的第 2 阶段的值为 2,区域 X 的第 3 阶段的值为 3 等等。区域 Z 的第 1 阶段的值为 1,区域 Z 的第 2 阶段的值为 2 ,第 3 阶段的 Z 区域的值为 3...第 1 阶段是 X 区域和 Z 区域的平均值...简单的多对数不会错吗?如果我错了,请纠正我。

标签: django database model


【解决方案1】:

我相信您正在寻找以下内容:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 2016-10-08
    • 2016-11-10
    相关资源
    最近更新 更多