前向声明 - Django中没有管理页面吗?
这可能是数据库设计的问题,但我想不出更好的办法。在我的几个模型中,有这些:
class User(models.Model):
name = models.CharField( max_length=40 )
# some fields omitted
bands = models.ManyToManyField( Band )
还有
class Band(models.Model):
creator = models.ForeignKey( User )
# some fields omitted
name = models.CharField( max_length=40 )
简单来说,我有一个用户实体,它和一个乐队实体之间是多对多的关系。问题是,我想让一个特殊的用户,也就是在网站上“创建”乐队的用户,拥有特别的编辑权限。所以我添加了一个叫做creator的外键。可是代码运行不起来,因为在源代码中,Band模型是在User模型之后定义的。为了处理这个问题,我提前声明了class Band(models.Model): pass
。可惜,这似乎不是个好主意,因为现在Band模型在django的管理界面中没有任何界面元素(乐队模型是存在的,只是无法编辑)。
我想问的是,我应该对这些模型做什么更改,才能让它们正常工作?(如果有的话)
1 个回答
12
请查看这个链接:http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey,里面提到:
如果你需要在一个还没有定义的模型上创建关系,你可以使用模型的名字,而不是直接使用模型对象:
class Car(models.Model):
manufacturer = models.ForeignKey('Manufacturer')
# ...
class Manufacturer(models.Model):
# ...