验证时或验证后填充django select

验证时或验证后填充django select,django,django-forms,Django,Django Forms,我有一个Django表单,其中有一个下拉列表,该下拉列表使用ajax动态填充。 form类如下所示: class SightingForm(ModelForm): ajax_bird = forms.CharField(required=True, label="Bird", widget=forms.Select(attrs={'class': 'longdropdown chosenBirds', 'data-placeholder': 'Select a Bird'}, choices=

我有一个Django表单,其中有一个下拉列表,该下拉列表使用ajax动态填充。 form类如下所示:

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第一次生成的

在clean方法中,您可能会看到我正在尝试做什么。我想根据ajax下拉列表中选择的内容更改默认选项。有什么干净的方法可以做到这一点吗