ajax-chosen が動的に入力されるドロップダウン付きの Django フォームがあります。フォーム クラスは次のようになります。
class SightingForm(ModelForm):
ajax_bird = forms.CharField(required=True, label="Bird", widget=forms.Select(attrs={'class': 'longdropdown chosenBirds', 'data-placeholder': 'Select a Bird'}, choices=DEFAULT_BIRDS) )
new_photo = forms.ImageField(required=False, label="Photo")
class Meta:
model = Sighting
fields = ('ajax_bird','count',)
def clean_ajax_bird(self):
ajax_bird = self.cleaned_data['ajax_bird']
abi = 0
try:
abi = int(ajax_bird)
bird = Bird.get_bird(abi)
if bird is None:
raise Exception
except Exception as ex:
raise forms.ValidationError("Please select a bird.")
return ajax_bird
def clean(self):
super(forms.ModelForm, self).clean()
try:
ab = self.cleaned_data['ajax_bird']
if int(ab) > 0:
bird = Bird.get_bird(int(ab))
self.ajax_bird.widget = forms.Select(attrs={'class': 'longdropdown chosenBirds', 'data-placeholder': 'Select a Bird'}, choices=((str(bird.id), str(bird.common_name),),))
return self.cleaned_data
except:
"""fail silently"""
検証まで、すべてが正常に機能しています。ページの他の部分が検証されない場合、ajax_bird フィールドにはユーザーの選択が入力されなくなります (最初に ajax によって生成されたため)。
クリーンな方法では、私がやろうとしていることを見ることができます。ajax ドロップダウンで選択した内容に基づいて、デフォルトの選択肢を変更したいと思います。これを行うためのきれいな方法はありますか?