【发布时间】:2021-04-28 03:23:48
【问题描述】:
我对 Django 和一般编程还很陌生。
我正在为建筑行业的朋友构建一个工具。基本上,客户投标投标,如果他们中标,他们就会签订合同。一个合同可以有多个项目,一个项目可以有多个工作。但用户还应该能够为未签订合同的小型项目创建工作。每项工作都必须在一个项目下。
如果用户有合同,我希望用户旅程如下所示: 创建合同 -> 创建项目 -> 创建工作。
我想将合同链接到用户和工作,但我不确定在两个相关模型中包含两次用户字段是否正确。我想知道我的解决方案是否错误,以及是否有更好的解决方案。
谢谢!
class Contract(TimeStampedModel):
owner = models.ForeignKey(
get_user_model(),
on_delete=models.CASCADE,
)
title = models.CharField(
max_length=100, blank=False, unique=False)
starting_date = models.DateTimeField(default=timezone.now, blank=True)
def __str__(self):
return self.title
class Project(TimeStampedModel):
owner = models.ForeignKey(
get_user_model(),
on_delete=models.RESTRICT,
)
name = models.CharField(
max_length=50, blank=False, unique=False)
contract = models.ForeignKey(
Contract,
on_delete=models.RESTRICT,
related_name='contract',
)
def __str__(self):
return self.name
class Job(TimeStampedModel):
name = models.CharField(
max_length=50, blank=False, unique=False)
starting_date = models.DateTimeField(default=timezone.now, blank=True)
location = models.PointField(geography=True, default=Point(0.0, 0.0))
address = models.CharField(max_length=250)
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
zipcode = models.CharField(max_length=20)
Project = models.ForeignKey(
Project,
on_delete=models.RESTRICT,
)
def __str__(self):
return self.name
【问题讨论】:
-
注意:默认情况下,django 通过向模型名称添加 S 字母来复数模型名称。所以你不需要系统地明确设置
verbose_name_plural(Job变成Jobs等)。
标签: django database django-models database-design