4

私は、属性を持つ(利点Charfieldと名付けましょう)を持つモデルを持っています。しばらくして、複数の選択肢を選択できるため、このフィールドをある種の に「アップグレード」する必要があると判断しました。choicesListField

私が検索したものから、2つのオプションがあります。

1 - 新しいモデルを作成し、この新しいモデルを参照する最初のモデルで ManyToManyField を使用します。このようにして、admin で使用される「複数選択」デフォルト フィールドがレンダリングされます。人生は素晴らしい。

2-フィールドをある種のセパレーター付きの文字列として保存するカスタムフィールドを作成します。

これらの 2 つのアプローチは、リストを Django モデルに保存する最も効率的な方法は何ですか?にまとめられています。その他の例の 2 番目のアプローチ: 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. これは私が持っている (そして人々に新しいアイテムを追加してほしくない) 選択肢の制御されたリストであり、このためのテーブルを作成するのはやり過ぎだと思います (ただし、このテーブルにフィクスチャを作成し、モデルを に登録することはできませんadmin.py。新しいアイテムを追加することはありません.しかし、フィクスチャでこれらの値を変更すると、移行がどのように機能するかわかりませ.

...そして、新しいカスタム フィールドを作成するかどうかはわかりません。これは、Djangoをアップグレードする際の問題など、その意味がわからないため、長期的には問題のようです.

ビルトインがないのはなぜListFieldですか?私が考えている 2 つのアプローチについて、長期的にはどのような問題があると思いますか? 私は最初のことを計画していますが、移行について少し迷っています。

4

2 に答える 2

2

django.contrib.postgres には ArrayField があります

于 2015-04-16T03:00:17.520 に答える
1

内部にリストのみを含む新しいテーブルを作成するつもりはないようですが(「やり過ぎ」になるため)、テーブルのすべてのエントリに同じ正確な値をコピー/貼り付けることを提案しています。私の意見では、良いモデル ソリューションではありません。

ManyToMany (または別のテーブルでトリックを行う他の実装) を使用することをお勧めします。

于 2014-06-30T06:30:51.053 に答える