ekr*_*rah 7 python django one-to-one models
我读过几个 地方(参见第二个答案),Django模型中的一对一关系几乎总是只用于继承,或访问其他无法访问的模型(如Django用户模型).
但是,似乎有些情况下你有一个对象,它总是只有一个另一个对象的实例,你在逻辑上想要将这两个对象分开.比如说,您的应用程序正在存储有关汽车的信息.每辆车只有一个司机,每个司机只开一辆车.将汽车和驾驶员分成两个独立的车型是不合理的?
cez*_*zar 12
想象一下,你有一个公司,并制作内部网工具列出所有员工,他们的职位,办公室,部门,工资等.你会在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')
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,您不希望所有员工都可以访问薪水,也许有很多人在管理区域中具有redactor状态,并决定将其外包给自己的模型并更改模型Employee:
class Employee(models.Model):
# above attributes
salary = models.OneToOneField(Salary)
Run Code Online (Sandbox Code Playgroud)
当然还有其他方法可以隐藏这些信息,但有一种可能性就是将信息分成两个表,即使它只是简单的1:1关系.
您的公司是一家软件公司,您引入了结对编程.每个员工都有一对编程合作伙伴.它可以只是一个编程合作伙伴.所以你再次调整你的模型:
class Employee(models.Model):
# above attributes
pair_programmer = models.OneToOneField('self')
Run Code Online (Sandbox Code Playgroud)
这将是递归的一对一关系.
一对一的关系并不常见,很难在初学者的教程中找到,但如果有一些特定的要求,你会发现自己创建了1:1的关系来解决问题.
这是我作品中的真实例子.我是生物信息学家,为微生物制作软件.它们属于属和种.每个属都可能包含一个或多个物种,但一个物种只能属于一个物种.这是一个明确的1:n关系.但现在,属一种类型,只有一种,只有一种.类型物种可属于一个属.我放在这里models.OneToOneField,除了models.ForeignKey.
不要过早担心1:1的关系.当你遇到一些具体问题时,你会发现你是否需要1:1的关系.
| 归档时间: |
|
| 查看次数: |
8762 次 |
| 最近记录: |