重複の可能性:オーバーロードされたinit
を使用したフォームの検証
私はここで何が間違っているのかを理解しようと午後全体を費やしました。ユーザーがフォームに入力すると、場所選択ボックスはユーザーの国によって異なり、それに応じてさまざまな都市が一覧表示されます。
モデルとモデルフォーム
class Cars(models.Model):
owner = models.ForeignKey(User)
name = models.CharField(max_length=25)
location = models.PositiveIntegerField(default=1)
created = models.DateTimeField(default=utc_time)
class CarsForm(ModelForm):
def __init__(self, country, *args, **kwargs):
super(CarsForm, self).__init__(*args, **kwargs)
self.fields['location'] = forms.ModelChoiceField(queryset=Cities.objects.filter(country=country))
class Meta:
model = Cars
exclude = ('owner', 'created',)
意見
def new_car(request):
if request.method == u'POST' and request.is_ajax():
form = CarsForm(request.POST)
if form.is_valid():
etc...
stackoverflow からのアドバイスに従い、モデルフォームinitを編集して国変数を渡せるようにしました。フォームの作成と html は正常に表示され、すべてがうまく機能しますが、フォームが検証されません。
更新:わかりました、私(「あなた」を意味します)が機能しているようです。いくつかの醜いものがありましたが、修正すると問題なく動作します。
- 位置フィールドのタイプがforeignkeyに変更され、データの不一致の問題が修正されました
- 国をkwargとして受け入れるようにinitが改訂されました
- フォーム検証は変数を kwarg CarsForm(request.POST, country=country) として渡すようになりました
成功!1時間以内に。みんな本当にありがとう!!