幸运的是,这实际上就是这样 django-autocomplete-light的一部分 。
您必须创建自己的表单(如果尚未完成):
class PersonForm(forms.ModelForm): class Meta: model = Person fields = ('__all__') widgets = { 'country': autocomplete.ModelSelect2(url='country-autocomplete' forward=['continent']), 'city': autocomplete.ModelSelect2(url='city-autocomplete' forward=['country']), }
更新自动填充功能:
class CountryAutocomplete(autocomplete.Select2QuerySetView): def get_queryset(self): if not self.request.is_authenticated(): return Country.objects.none() qs = Country.objects.all() continent = self.forwarded.get('continent', None) if continent: qs = qs.filter(continent=continent) if self.q: qs = qs.filter(country__istartswith=self.q) return qs class CityAutocomplete(autocomplete.Select2QuerySetView): def get_queryset(self): if not self.request.is_authenticated(): return City.objects.none() qs = City.objects.all() country = self.forwarded.get('country', None) if country: qs = qs.filter(country=country) if self.q: qs = qs.filter(city__istartswith=self.q) return qs
并在ModelAdmin中使用新表单:
class PersonAdmin(admin.ModelAdmin): form = PersonForm