【问题标题】:Django Models in Java-style File StructureJava 风格文件结构中的 Django 模型
【发布时间】:2011-11-15 11:15:33
【问题描述】:

我正在构建一个大型 Django 应用程序,并希望将我的数据模型拆分为“每个文件的类”结构,但在尝试这样做时,我遇到了一些循环依赖问题复杂的模型。

例如,我有三个模型,都在单独的文件中:

class Book(models.Model):
    title = models.CharField(max_length=35)
    author = models.ForeignKey(Author)
    genre = models.ForeignKey(Genre)

class Genre(models.Model):
    name = models.CharField(max_length=20)
    sample_book = models.ForeignKey(Book)

class Author(models.Model):
    name = models.CharField(max_length=60)
    preferred_genre = models.ForeignKey(Genre)

由于 Book 依赖于 Genre 而 Genre 依赖于 book,当我在任何地方导入 Book 时,它会启动一个循环模型依赖链,因为每个文件都从其他文件导入模型。我怎样才能避免这种情况?这是一种会很快变得非常庞大的项目,所以我不想将所有模型都集中到一个文件中。

【问题讨论】:

标签: python django django-models


【解决方案1】:

我认为这是一个设计问题,而不是 django 问题。

您的流派不应提及书籍。否则,无论您使用什么语言/框架,您都将创建循环引用。

sample_book 似乎是应用程序的一项功能。我建议可以创建一个实体来存储您选择的样本书。

或者,如果示例书籍只是所有书籍中的随机书籍,您可以在其他地方有一个返回书籍的函数。

【讨论】:

  • 这只是一个例子。不幸的是,实际代码是保密的,所以我无法分享它,但实际项目比这要复杂得多。虽然您对 sample_book 的具体示例可能是正确的,但这并不是示例的真正重点。我只是想传达一个类似的问题以供参考。
【解决方案2】:

您也可以将模型名称指定为字符串:

preferred_genre = models.ForeignKey("Genre")

【讨论】:

  • 啊哈!非常感谢。另外,感谢 codecool 指出我在搜索中遗漏的线程。
猜你喜欢
  • 2012-01-07
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多