转发声明 - django没有管理页面?

时间:2009-07-28 15:00:56

标签: python django database-design circular-dependency forward-declaration

这可能是数据库设计问题,但我无法弄清楚。在其他几个方面,我有这些模型:

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的ForeignKey。代码无法运行,因为Band来自源中的User。所以我转发声明class Band(models.Model): pass。可悲的是,这似乎并不是一个好主意,因为现在Band是唯一没有在django admin中显示任何界面元素的模型(Bands模型就在那里,它只是无法编辑)。

我的问题是,我应该在模型中做出哪些改变才能使这项工作正常进行? (如果有的话)

1 个答案:

答案 0 :(得分:12)

请参阅:http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey,其中说:

  

如果您需要在没有的模型上创建关系   尚未定义,您可以使用模型的名称   而不是模型对象本身:

 class Car(models.Model):
      manufacturer = models.ForeignKey('Manufacturer')
      # ...

 class Manufacturer(models.Model):
      # ...