【问题标题】:Django - Is it okay to have a model with only one field?Django - 可以有一个只有一个字段的模型吗?
【发布时间】:2017-04-22 10:15:06
【问题描述】:

在 5 年级时,当我们学习如何勾勒研究论文时,我们的老师告诉我们,你永远不应该有一个要点。我觉得我违反了这条规则,也许有更好的方法。

我有模型Movie,它有titleyear 之类的字段。我还想包括genre。但是,电影可以分为不止一种类型。所以我觉得我需要有一个多对多的关系。但我真的不想让Genre 成为自己的模型类,因为只有一个字段Genre.genre。这对我来说似乎是错误的。我知道我可以将流派设置为 CharField,并使用某种分隔符将流派分开,即action|adventure|comedy。但这是最好的方法吗?

我计划对这个数据库运行原始 SQL 查询,因此简单性现在很有价值。

【问题讨论】:

标签: sql django django-models


【解决方案1】:

对于具有单一属性的模型,没有这样的一般质量规则。由于电影可以有不止一种类型,而且类型显然可以属于不止一种电影,ManyToMany 关系可能是你最好的选择。

另一种方法是在您的模型中添加genresTextField,并将所有类型保存为逗号分隔列表。这种方法的许多明显问题之一是,您将无法按流派有效地查询电影,并且无法保证在两个不同的电影实例中不会以不同的方式编写相同的流派。

如果您使用的是 PostgreSQL,另一种选择是将 genres 定义为 ArrayListCharFields。为每种可能的类型定义一个常量,并将其传递给您的CharFieldchoices

COMEDY = 'COMEDY'
ADVENTURE = 'ADVENTURE'
ACTION = 'ACTION'
# ...

GENRE_CHOICES = (
    (COMEDY, 'Comedy'),
    (ADVENTURE, 'Adventure'),
    (ACTION, 'Action'),
    # ...
)

【讨论】:

    【解决方案2】:

    AFAIK 没有这样的规则。 genre 是一个单独的模型是有意义的。因此,查询所有类型并访问该类型的电影会更直接。

    如果您仍然觉得奇怪,请在 Genre 模型中添加 created_timecreated_user 字段。稍后您会发现它很有用。

    【讨论】:

      猜你喜欢
      • 2015-09-01
      • 2020-01-19
      • 2017-05-27
      • 2022-01-24
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      相关资源
      最近更新 更多