假设我们有班级Employee
。我想要一个引用同一个类的不同实例的字段。
怎么写这个?以下代码怎么样?
ref_employee= models.ForeignKey('self',null=True,blank=True)
答案 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)
强制id
和ref_employee_id
具有单独值的约束超出了Django的ORM范围。您需要在数据库级别通过SQL在syncdb中或手动添加所述约束。