2012-04-20 20 views
-1

forms.ChoiceFieldの検証に問題があります。私は2つのテーブル/モデルを持っていますDjangoフォーム検証モデルの選択

class City(models.Model): 
    ... 
    name = models.CharField(max_length=64) 
    ... 

class ShoppingCenter(models.Model): 
    ... 
    name = models.CharField(max_length=64) 
    city = models.ForeignKey(City) 

人々は都市やショッピングセンターで活動を登録できます。しかし、多くの都市やさらに多くのショッピングセンターがあるため、私はショッピングセンターの選択肢を選択した都市に限定したいと考えています。私は都市名のCharFieldと空のChoiceFieldを持つフォームを作成しました。

ユーザーがCharFieldにajax/jqueryオートコンプリートを使用して入力した後、ajax/jqueryを使用してShoppingCenter ChoiceFieldの値を入力します。

これはすべてうまくいくようです。私は有効な都市を入力し、JavaScriptはShoppingCenterの選択フィールドのオプションを入力します。

ただし、このフォームを検証する場合は失敗します。私は取得しています:

form_errors

{ 'shopping_centre_id':[u'Select有効な選択肢を。 1]は有効な選択肢の1つではありません。]]

1は有効なショッピングセンターIDですが、データベースから選択されました。

私は別のMultipleChoiceFieldが同じフォームであり、うまく動作しています。 2つの唯一の違いは、標準のDjangoを使用してMultipleChoiceFieldが生成され、javascript(ajax + django)を使用してChoiceFieldが作成されることです。

今のところ私はself._errorsからエラーを取り除き、shopping_centre_idの値をcleaned_dataに追加する独自のクリーンメソッドを定義して回避策を見つけました。

検証エラーの原因は何ですか?

答えて

-1

ChoiceField__init__の場合はchoicesと記入してください。 dataから都市名を取り、Cityを検索し、ショッピングセンターをフィルタリングしてchoicesに入れることができます。

ショッピングセンターにはModelChoiceFieldを使用する方がよいので、choicesを手動で構築する必要はなく、そのフィールドにクエリセットを渡すだけです。 がない場合は、ShoppingCenter.objects.none()になります。そうでない場合は、都市別にフィルタリングされます。

+1

ModelChoiceFieldをショッピングセンターに使用することはできません。これはユーザーが入力する都市に依存するため、恐れがあります。ショッピングのリストを表示できないため、センター。 – Henri

関連する問題