4

我有一个带有属性的模型Charfield(让我们将其命名为优点)。choices一段时间后,我决定应该将该字段“升级”为某种ListField,因为可以选择多个选项。

根据我的搜索,我有两个选择:

1 - 创建一个新模型,并在引用此新模型的第一个模型中使用 ManyToManyField。这样,将呈现 admin 中使用的“多选”默认字段。生活很好。

2-创建一个自定义字段,将我的字段保存为带有某种分隔符的字符串。

这两种方法在 Django 模型中存储列表的最有效方法是什么?以及更多示例中的第二种方法:如何在 django 中创建列表字段http : //cramer.io/2008/08/08/custom-fields-in-django/,https: //djangosnippets.org/snippets/1200 / , https://djangosnippets.org/snippets/1491/

事实是:我不想创建另一个模型只是为了拥有ManyToManyField. 这是我拥有的选择的受控列表(并且不希望人们添加新项目)并认为为此创建一个表是多余的(尽管我可以为该表创建一个固定装置而不在中注册模型admin.py,所以人们不会添加新项目。但是我不知道在更改固定装置中的这些值时迁移将如何工作,而在过去我只是偶然在我的模型定义中选择元组)。

...并创建一个新的自定义字段,我不知道。从长远来看,这似乎是个问题,因为我不知道其含义、升级 Django 时的问题等。

为什么没有内置ListField?从长远来看,我正在考虑的两种方法有哪些问题?我打算做第一个,但我对迁移有点迷茫。

4

2 回答 2

2

django.contrib.postgres 有一个 ArrayField

于 2015-04-16T03:00:17.520 回答
1

您似乎不愿意创建一个仅包含列表的新表(因为它会“过大”),但您的建议是在表的所有条目中复制/粘贴相同的确切值,即在我看来,这不是一个好的模型解决方案。

我建议使用 ManyToMany(或任何其他实现与另一个表的技巧)。

于 2014-06-30T06:30:51.053 回答