web-dev-qa-db-ja.com

Django Model Multiple Choice

ModelにはMultipleChoiceFieldがないことを知っています。Formsでのみ使用できます。

今日、複数の選択肢に関連する新しいプロジェクトを分析するときに問題に直面しています。

複数選択のオプションを持つCharFieldchoicesのようなフィールドが欲しいです。

CharFieldを作成し、forms.MultipleChoiceFieldを使用してフォームの複数の選択肢を管理し、選択肢をコンマで区切って保存することで、この問題を別のときに解決しました。

このプロジェクトでは、構成が原因で、上記で説明したとおりに実行できません。モデルで実行する必要があり、[〜#〜] not [〜#〜]を編集しますDjango admin formneitherフォームを使用します。 複数の選択肢を持つモデルフィールドが必要です

  • 誰かがModelsを介してこのような何かを解決しましたか?

モデル機能の一部をオーバーライドしたり、カスタムウィジェットを使用したりするかもしれません...わかりません。ここでちょっと迷ってしまいました。


編集

simpleの選択肢がありますが、次のようなものが欲しいです:

class MODEL(models.Model):
    MY_CHOICES = (
        ('a', 'Hola'),
        ('b', 'Hello'),
        ('c', 'Bonjour'),
        ('d', 'Boas'),
    )
    ...
    ...
    my_field = models.CharField(max_length=1, choices=MY_CHOICES)
    ...

しかし、保存機能複数の選択肢 1つの選択肢だけではありません。

44
AlvaroAV

データベースレベルでデータを保存する方法について考える必要があります。これにより、ソリューションが決まります。

おそらく、複数の値を格納しているテーブル内の単一の列が必要です。また、これにより、シリアル化の方法について考えるように強制されます。たとえば、カンマを含む可能性のある文字列を保存する必要がある場合は、カンマで区切ることはできません。

ただし、次のいずれかのソリューションを使用するのが最適です。

49
spookylukey

Postgresを使用している場合は、 ArrayField の使用を検討してください。

from Django.db import models
from Django.contrib.postgres.fields import ArrayField

class WhateverModel(models.Model):
    WHATEVER_CHOICE = u'1'
    SAMPLE_CHOICES = (
        (WHATEVER_CHOICE, u'one'),
    )
    choices = ArrayField(
        models.CharField(choices=SAMPLE_CHOICES, max_length=2, blank=True, default=WHATEVER_CHOICE),
    )
40
lechup

2つのうち、 https://pypi.python.org/pypi/Django-select-multiple-field/ はより丸みを帯びて完全に見えます。素敵な単体テストのセットもあります。

私が見つけた問題は、モデルフィールドを実装するクラスでDjango 1.10の非推奨警告をスローすることです。

これを修正してPRを送信しました。彼らが私のPRをマージするまで(もし彼らがheheを決定した場合)、最新のコードはレポの私のフォークにあります: https://github.com/matiasherranz/Django-select-multiple-field =

乾杯!

M.-

10
Matias Herranz

ウィジェットをテキスト入力のように見せながら、候補からいくつかのオプションを選択できるようにする場合は、 Select2 を探している可能性があります。 Django-select2 もあり、これをDjango Forms and Adminと統合します。

0
Risadinha