0

Django で forms.MultipleChoiceField を使用しようとしていますが、form.is_valid は True を返しますが、views.py のクエリは「一致するクエリが存在しません」を返します。

フォーム.py:

LIST_INTERESTS = (
    ('Energy', 'Energy'),
    ('Business', 'Business'),
    ('Social', 'Social'),
    ('Mobile', 'Mobile'),
)
interests = forms.MultipleChoiceField(choices=LIST_INTERESTS, initial='Energy')

ビュー.py:

temp_interests = list(form.cleaned_data['interests']),
for i in temp_interests:
    b = Interests.objects.get(val=i)

...その時点で、クエリに一致するものが存在しないと不平を言います。何か案は?

ボーナス情報:

temp_interests を debug.html にプラグインしたとき:

{% for i in temp_interests %}
    {{ i }}<br>
{% endfor %}

[u'Answer 1', u'Answer 2'] を返します

4

2 に答える 2

0

問題は次の行にあります。

b = Interests.objects.get(val=i)

get()メソッドで。

ここで何を達成しようとしているのかわかりません。ただし、get()メソッドが行うことは、渡された引数を使用して単一の一致するクエリを返すことです。渡された引数を使用してオブジェクトを見つけることができない場合、DoesNotExist例外が発生します。それがあなたのケースで起こっています。

[注: また、get()渡された引数に従って存在するオブジェクトが 1 つだけであることが確実な場合は、必ず を使用してください。不明な場合はfilter()、指定されたクエリに一致するすべてのオブジェクトのリストを返すメソッドを使用できます。]

属性が渡す値と等しいInterestオブジェクトが存在することを確認する必要があります。valしたがって、上記の場合、の値と等しいInterestオブジェクトがないため、例外が発生します。vali

上記をデバッグするには、次のように print ステートメントを追加します。

temp_interests = list(form.cleaned_data['interests']),
for i in temp_interests:
    print i  # Debug
    b = Interests.objects.get(val=i)

サーバーをチェックして、どのvalue例外が発生しているかを確認します。

于 2012-12-29T07:53:58.567 に答える
0

がモデルの場合Interests、代わりに ModelMultipleChoiceField を使用してこれを試すことができます。

interests = forms.ModelMultipleChoiceField(queryset=Interests.objects.all())

このようにして、リストの代わりにモデルinterestsからの実際のオブジェクトがフィールドに取り込まれますInterests

于 2012-12-29T15:32:13.177 に答える