Python Django复杂建模?
我正在为一组IT项目构建一个小型报告系统,不知道如何在django模型级别将其组合在一起 这个想法相当简单: 我有一本关于碎布指示器(绿色、黄色、红色等)的字典: DicCoreBase是一个抽象模型,它向所有字典项添加了一些额外的逻辑属性 然后是实际的RAG度量项目(如“进度”、“时间线”、“范围定义”等): 除此之外,还有一些自由文本项,允许用户向其状态记录添加注释和说明:Python Django复杂建模?,python,django,django-models,Python,Django,Django Models,我正在为一组IT项目构建一个小型报告系统,不知道如何在django模型级别将其组合在一起 这个想法相当简单: 我有一本关于碎布指示器(绿色、黄色、红色等)的字典: DicCoreBase是一个抽象模型,它向所有字典项添加了一些额外的逻辑属性 然后是实际的RAG度量项目(如“进度”、“时间线”、“范围定义”等): 除此之外,还有一些自由文本项,允许用户向其状态记录添加注释和说明: class DicProjectFreeTextReportItem(DicCoreBase): name =
class DicProjectFreeTextReportItem(DicCoreBase):
name = models.CharField(max_length=32)
description = models.TextField()
比如说,我们有两个指标:“绿色”和“红色”,两个指标项目:“进度”和“质量”,还有一个自由文本:“改进完成”。项目报告记录将类似于:
'progress' -> 'green'
'quality' -> 'red'
'improvements done' -> 'fixed all major defects'
绑定到特定的“项目”模型
如何使用标准django建模工具对此进行建模?1。根据下面的示例,度量项目有一个指示器。这应该是一个: 假设“修复了所有主要缺陷”是自由文本的
description
字段,那么DicProjectFreeTextReportItem
就可以了
2.由于项目报告记录可以有多个度量项目和自由文本项目,因此应为:
现在,参考上面的示例和我们制作的Django模型,我们可以得到如下信息:
p = Project.objects.get(pk=1)
record = p.reports.all()[0]
print record.metrics.all().values_list('name', flat=True)
# prints ['progress', 'quality']
print record.metrics.get(name='progress').indicator.text_marker
# prints 'green'
'progress' -> 'green'
'quality' -> 'red'
'improvements done' -> 'fixed all major defects'
class DicProjectStatusRAGIndicator(DicCoreBase):
text_marker = models.CharField(max_length=64)
color_marker = models.CharField(max_length=6)
icon = models.FileField(upload_to='RAG_icons')
class DicProjectStatusRAGReportItem(DicCoreBase):
name = models.CharField(max_length=32)
description = models.TextField()
indicator = models.ForeignKey(DicProjectStatusRAGIndicator)
class ProjectReportRecord(models.Model):
project = models.ForeignKey(Project, related_name='reports')
metrics = models.ManyToManyField(DicProjectStatusRAGReportItem)
free_texts = models.ManyToManyField(DicProjectFreeTextReportItem)
p = Project.objects.get(pk=1)
record = p.reports.all()[0]
print record.metrics.all().values_list('name', flat=True)
# prints ['progress', 'quality']
print record.metrics.get(name='progress').indicator.text_marker
# prints 'green'