在Django中,你如何让模型参考自己?

时间:2011-02-06 01:25:02

标签: django django-models

假设我们有班级Employee。我想要一个引用同一个类的不同实例的字段。

怎么写这个?以下代码怎么样?

ref_employee= models.ForeignKey('self',null=True,blank=True)

5 个答案:

答案 0 :(得分:55)

http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

  

创建递归关系 -   一个具有多对一的对象   与自身的关系 - 使用   models.ForeignKey('self')

所以你做对了。通过运行代码来确定代码是否能达到您想要的效果通常会更快:)

答案 1 :(得分:3)

我相信您甚至可以排除应用名称,如下所示:

ref_employee= models.ForeignKey('Employee',null=True,blank=True)

答案 2 :(得分:2)

您可以按名称引用其他模型(使用字符串,包括 包),而不是直接由类:

因此,如果您的Employee课程位于hr应用中:

class Employee(models.model):
   other_employee = models.ForeignKey('hr.models.Employee', null=True, blank=True)

答案 3 :(得分:2)

是的,这是正确的,但考虑你应该写 'null=True' 因为如果你不提到,在你的数据库中递归地创建一个联合表

答案 4 :(得分:0)

强制idref_employee_id具有单独值的约束超出了Django的ORM范围。您需要在数据库级别通过SQL在syncdb中或手动添加所述约束。