为什么Django中没有“ListField”?

时间:2014-06-30 03:51:57

标签: django django-models django-admin django-migrations

我的模型具有Charfield(让我们将其命名为优点)并具有choices属性。过了一会儿,我决定将这个字段“升级”到某种ListField,因为可以选择多个选项。

根据我搜索的内容,我有两种选择:

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

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

这两种方法在What is the most efficent way to store a list in the Django models?中进行了总结,第二种方法在更多示例中进行了总结:How to create list field in djangohttp://cramer.io/2008/08/08/custom-fields-in-django/https://djangosnippets.org/snippets/1200/https://djangosnippets.org/snippets/1491/

事实是:我不想创建另一个模型只是为了ManyToManyField。这是我有一个受控制的选择列表(并且不希望人们添加新项目),并认为为此创建表格是过度的(尽管我可以为此表创建一个夹具,而不是在{{1]中注册模型因此人们不会添加新项目。但是我不知道在更改灯具中的这些值时迁移会如何工作,而在过去我只会碰到我的选择元组模型定义)。

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

为什么没有内置admin.py?从长远来看,你认为我认为的两种方法有哪些问题?我打算先做第一次,但我对迁移有点迷失。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

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

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