我正在尝试在Django应用程序中实现以下数据模型:
项目包含3个容器: 1)可行 2)参考文献 3)Backburner
可以在项目中创建条目,并且需要将其分配给任一个容器(它不能保持自由浮动)。
因此,Project始终包含三个容器,其中任何容器都可以为空。条目总是在一个(并且只有一个)容器中。但是,Entry可以从容器切换到容器。
这是我的尝试。这一点合理吗?
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)
答案 0 :(得分:1)
您可以使用简单的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)