Django型号相同类型的外键
我试图构建一个非常通用的模型,它需要嵌套的灵活性。下面是一个简单的例子Django型号相同类型的外键,django,django-models,Django,Django Models,我试图构建一个非常通用的模型,它需要嵌套的灵活性。下面是一个简单的例子 Work Symphony No.1 |_Work |_Movement 1 | |_Work | |_Allegro | |_Work | |_Largo |
Work Symphony No.1
|_Work |_Movement 1
| |_Work | |_Allegro
| |_Work | |_Largo
| |
|_Work |_Movement 2
|_Work |_Poco Allegretto
我希望我能做的是抛出一个语法错误,因为工作显然还没有定义,它不能是外键
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)
我相信这样做,可以说我可以让弗莱成为他自己的祖父,但有没有一种“正确”的方法呢 谢谢@Seether
class Work(BaseWork):
name = models.CharField(max_length=100)
work_parent = models.ForeignKey('self', null=True)
我很好奇这是否以及为什么会是一种不好的做法。肯定有很多模型需要嵌套,对吗?他们对结构进行硬编码了吗?关于work\u parent=models.ForeignKey('self')呢?除此之外,我想问问自己,你到底想要实现什么,因为在这种设计中,你可能需要在其他地方实现一些其他的数据控制机制,因为模型本身并不能帮助你阻止Fry成为他自己的祖父。“self”似乎起作用了,谢谢。严格地说这段代码,我看不出有什么不好的做法。我之前告诉过你的是问问你自己,你需要筑巢做什么。还请记住,这并不完全是您在这里进行的嵌套,更可能是一系列条目(null=True)引用了其他条目:(pk(1)->pk(5),pk(2)->null,pk(5)->pk(1)…)。可以创建循环引用,但不一定。如果您讨论的是模型中的子类化,那么这肯定不是一个坏的做法,而且是愚蠢的想法。当你定义一个新的模型时,只需考虑子类<代码>模型。