-1

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

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を使用してShoppingCenterChoiceFieldの値を入力します。

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

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

form_errors

{'shopping_centre_id':[u'有効な選択肢を選択してください。1は利用可能な選択肢の1つではありません。']}

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

私は別のMultipleChoiceFieldが同じフォームであり、それは正常に機能します。2つの違いは、MultipleChoiceFieldが標準のDjangoを使用して生成され、ChoiceFieldがjavascript(ajax + django)を使用して作成されることだけです。

今のところ、self._errorsからエラーを削除し、shopping_centre_id値をcleaned_dataに追加する独自のcleanメソッドを定義することで回避策を見つけました。

検証エラーの原因を知っている人はいますか?

4

1 に答える 1

-1

フォームの に記入しchoicesます。提供された から都市名を取得し、 を取得し、ショッピング センターをフィルタリングして に入れることができます。ChoiceField__init__dataCitychoices

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

于 2012-04-21T04:30:09.493 に答える