4

モデルの複数の選択肢に関する2つの異なる問題があります。

最初に、ユーザーが 1 つまたは複数の曜日を選択できるように、複数の選択肢を作成しようとしています。

DAYS_CHOICES = (
    (1, _('Monday')),
    ...
    (7, _('Sunday')),
)
...
day = models.ManyToManyField('day', choices=DAYS_CHOICES)

2番目の問題:

他のモデルで定義されたモデルとの ManyToMany リレーションを作成したい: 最初 (モデルへのインポート):

from events.models import Category

2 番目 (モデルに関連するフィールド):

type = models.ManyToManyField('Category', null=True, blank=True)

syncdb で次のエラーが発生します。

エラー: 1 つ以上のモデルが検証されませんでした: situ.situ: 'day' には、インストールされていないか抽象的であるモデル日との m2m 関係があります。
situ.situ: 'type' はモデル カテゴリと m2m 関係にあり、インストールされていないか抽象的です。

4

3 に答える 3

5

あなたが使用することができます:

day = forms.ModelMultipleChoiceField(queryset=Day.objects.all())
于 2011-04-13T06:23:26.520 に答える
4

残念ながら、ManyToManyリレーションは他のモデルとのリレーションに対してのみ機能し、選択肢セットの値に対しては機能しません。Djangoは、組み込みの複数選択モデルフィールドタイプを提供していません。ただし、過去に複数選択の選択肢フィールドを使用するときにこのスニペットを使用しました:http ://www.djangosnippets.org/snippets/1200/

これにより、選択された複数のオプションがCharFieldに格納されたコンマ区切りのリストにエンコードされます。これは、選択範囲で何らかの結合などを行う必要がない限り、うまく機能します。それを行う必要がある場合は、ManyToManyFieldを使用できる新しいDayモデルを定義する必要があります。

2番目の問題は、最初の問題の結果であると私は信じています。その問題を解決すれば、大丈夫です。

于 2011-03-03T23:19:04.147 に答える
2

あなたの質問の最初の部分について。を使用する必要がありますMultipleChoiceField

DAYS_CHOICES = (
    (1, _('Monday')),
    ...
    (7, _('Sunday')),
)
...
days = forms.MultipleChoiceField(choices=DAYS_CHOICES)

http://docs.djangoproject.com/en/dev/ref/forms/fields/#multiplechoicefield

これにより、Unicodeオブジェクトのリストが生成されます。

2番目の問題については、m2mフィールドのモデルの抽象宣言にアプリ名を含めるか、抽象的に宣言しない必要があります。

type = models.ManyToManyField(Category, null=True, blank=True)

また

type = models.ManyToManyField('events.Category', null=True, blank=True)

Categoryモデルが後でmodels.pyの同じアプリで定義された場合は、そのままにしておくことCategoryができますが、別のアプリにあるため、アプリ名を指定する必要があります。

于 2011-03-04T04:39:08.290 に答える