我正在尝试在django应用中实现以下数据模型:
一个项目由3个容器组成:1)可操作2)参考3)发burner
可以在项目中创建一个条目,并且需要分配给任何一个容器(不能保持自由浮动)。
因此,一个项目始终包含三个容器,其中任何一个都可以为空。条目始终位于一个容器中的一个(也只有一个)中。但是,可以将条目从容器转换为容器。
这是我的尝试。这完全合理吗?
class Project(models.Model):
project_title = models.CharField()
created_date = models.DateTimeField('date created')
class References(models.Model):
project = models.OneToOneField(
Project,
on_delete=models.CASCADE,
primary_key=True,
)
class BackburnerItems(models.Model):
project = models.OneToOneField(
Project,
on_delete=models.CASCADE,
primary_key=True,
)
class ActionSteps(models.Model):
project = models.OneToOneField(
Project,
on_delete=models.CASCADE,
primary_key=True,
)
class Entry(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=200)
action_steps = models.ForeignKey(ActionSteps)
references = models.ForeignKey(References)
backburner = models.ForeignKey(BackburnerItems)
您可以使用具有选择的简单CharField
将条目分配给特定容器:
class Entry(models.Model):
REFERENCE = 'reference'
BACKBURNER = 'backburner-item'
ACTION_STEP = 'action-step'
CONTAINER_CHOICES = (
(REFERENCE, 'Reference'),
(BACKBURNER, 'Backburner item'),
(ACTION_STEP, 'Action step'),
)
container = models.CharField(choices=CONTAINER_CHOICES)
project = models.ForeignKey('Project', on_delete=models.CASCADE)
...
您可以轻松查询属于特定容器的条目,无论是从Project
实例还是从Entry
类:
references = project.entry_set.filter(container=Entry.REFERENCE)