gpt4 book ai didi

python - 何时在 Django 模型中使用一对一关系

转载 作者:太空狗 更新时间:2023-10-29 22:15:55 24 4
gpt4 key购买 nike

我读过 a few places (见第二个答案)Django 模型中的一对一关系几乎总是只用于继承,或访问其他不可访问的模型(如 Django 用户模型)。

但是,似乎在某些情况下,您拥有一个对象,该对象始终恰好具有另一个对象的一个​​实例,而您在逻辑上希望将这两个对象分开。比方说,您的应用正在存储有关汽车的信息。每辆车只有一个司机,每个司机只能驾驶一辆车。将汽车和驾驶员分成两个独立的模型没有意义吗?

最佳答案

假设您有一家公司,并制作了列出所有员工、他们的职位、办公室、部门、薪水等的 Intranet 工具。您将在 Django models.py 中创建一个 Employee 类,可能是这样的:

class Employee(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
position = models.CharField(max_length=255)
office = models.CharField(max_length=20)
salary = models.IntegerField()
department = models.ForeignKey(Department, related_name='employees')

但是由于某些原因你不想让所有员工都能拿到薪水,可能admin区有很多redactor身份的人,决定外包给自己的model,改model Employee:

class Employee(models.Model):
# above attributes
salary = models.OneToOneField(Salary)

当然还有其他方法可以隐藏此信息,但一种可能性是将信息分成两个表,即使它只是简单的 1:1 关系。

您的公司是一家软件公司,您引入了结对编程。每个员工都有一对编程伙伴。它可以只是一个编程伙伴。所以你再次调整你的模型:

class Employee(models.Model):
# above attributes
pair_programmer = models.OneToOneField('self')

这将是一个递归的一对一关系。

一对一关系不是很常见,在初学者教程中很难找到,但如果有一些特定要求,您会发现自己创建 1:1 关系来解决问题。

这是我工作中的一个真实例子。我是生物信息学家,为微生物制作软件。它们按属和种分类。每个属可能包含一个或多个物种,但一个物种只能属于一个属。这是一个明确的 1:n 关系。但是现在,一个属有一个模式种,只有一个而且只有一个。模式种可以属于一个属。除了 models.ForeignKey 之外,我在这里放置了 models.OneToOneField

事先不要太担心 1:1 的关系。当你遇到一些具体问题时,你会弄清楚是否需要 1:1 关系。

关于python - 何时在 Django 模型中使用一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25206447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com