【问题标题】:Forward declaration - no admin page in django?前向声明 - django 中没有管理页面?
【发布时间】:2009-07-28 15:00:56
【问题描述】:

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

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 admin 中不显示任何界面元素的模型(Bands 模型在那里,只是无法编辑)。

我的问题是,我应该对模型进行哪些更改才能使其正常工作? (如果有的话)

【问题讨论】:

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


    【解决方案1】:

    见:http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey,上面写着:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多