django中,如何指定当前model为ForeignKey?


比方说,有一个员工的model, 我还想定义一个 上级领导 字段,该字段 也是一个员工,该如何声明呢?

ForeignKey django model 自引用

兵库北女神 11 years, 3 months ago

这是个好问题,答案也很简单。 ;D 就是基本和指定一个ForeignKey一样。但是也需要注意几个地方,举个例子:

  1. 定义一个指向自己的ForeignKey

    Class Person(model.Model):
        parent = models.ForeignKey('self')
    
  2. 你还可以指定一个related name,比如

    Class Person(model.Model):
        parent = models.ForeignKey('self', related_name='children')
    
  3. 当然,您可能不想给一个Person指定parent, 这样就需要添加 null=True 和 blank=True

    Class Person(model.Model):
        parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
    
  4. 你可以通过以下代码查询children:

    person.children
    

最优的方式(个人认为),使用django-mptt来优化结构,而且可以拥有一些树的功能。

from mptt.models import MPTTModel, TreeForeignKey

class Person(MPTTModel):
    parent = TreeForeignKey('self', related_name='children', null=True, blank=True)

希望对你有帮助。

猪脑浆 answered 11 years, 3 months ago

Your Answer