前向声明 - Django中没有管理页面吗?

3 投票
1 回答
521 浏览
提问于 2025-04-15 13:13

这可能是数据库设计的问题,但我想不出更好的办法。在我的几个模型中,有这些:

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):
      # ...

撰写回答