【发布时间】:2011-06-22 02:33:43
【问题描述】:
假设我们有类Employee。我想要一个引用同一类的不同实例的字段。
这个怎么写?下面的代码呢?
ref_employee= models.ForeignKey('self',null=True,blank=True)
【问题讨论】:
标签: django django-models django-orm
假设我们有类Employee。我想要一个引用同一类的不同实例的字段。
这个怎么写?下面的代码呢?
ref_employee= models.ForeignKey('self',null=True,blank=True)
【问题讨论】:
标签: django django-models django-orm
您可以通过名称引用其他模型(使用字符串,包括 包),而不是直接由类:
所以,如果您的 Employee 课程在 hr 应用程序中:
class Employee(models.model):
other_employee = models.ForeignKey('hr.models.Employee', null=True, blank=True)
【讨论】:
models.ForeignKey('hr.Employee', null=True, blank=True))
http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
创建递归关系—— 具有多对一的对象 与自身的关系——使用
models.ForeignKey('self').
所以你说得对。通过运行它来确定代码是否会执行您想要的操作通常会更快:)
【讨论】:
强制id 和ref_employee_id 具有不同值的约束超出了Django ORM 的范围。您需要在数据库级别通过 SQL 或手动添加所述约束。
【讨论】:
我相信您甚至可以排除看起来像这样的应用名称:
ref_employee= models.ForeignKey('Employee',null=True,blank=True)
【讨论】:
是的,这是正确的,但请考虑您应该写 'null=True',因为如果您不提及,则在您的数据库中递归地创建一个联合表
【讨论】: