Django模型同类型的外键

时间:2014-11-05 12:47:31

标签: django django-models

我正在尝试构建一个非常通用的模型,需要嵌套的灵活性。这是一个简单的例子。

Work                        Symphony No.1
  |_Work                              |_Movement 1
  |  |_Work                           |  |_Allegro
  |  |_Work                           |  |_Largo
  |                                   |
  |_Work                              |_Movement 2
     |_Work                              |_Poco Allegretto

我希望我能做什么会引发语法错误,因为Work显然还没有定义它不能是ForeignKey。

class Work(models.Model):
    work_name = models.CharField('Work Name', max_length=100)
    work_parent = models.ForeignKey(Work)

我在考虑使用这样的基类:

class BaseWork(models.Model):
    pass

class Work(BaseWork):
    name = models.CharField(max_length=100)
    work_parent = models.ForeignKey(BaseWork)

我相信通过这样做,我可以让弗莱成为他自己的祖父,但是有没有'正确'的方法呢?

1 个答案:

答案 0 :(得分:1)

谢谢@Seether。

class Work(BaseWork):
    name = models.CharField(max_length=100)
    work_parent = models.ForeignKey('self', null=True)

我很好奇是否以及为什么这会是不好的做法。当然必须有很多模型需要嵌套吗?他们是否对结构进行硬编码?