我有一个简单的表单,允许用户选择他的country
,state
和district
并重新显示所选数据。
除了显示的内容不是"文本"之外,一切都按预期工作。但是" ids"所选数据。
期望:你属于印度,旁遮普,贾朗达尔。我也是。 ;)
输出:你属于1,2,4。我也是。 ;)
# my form
class MyInfoForm(forms.Form):
country = forms.ModelChoiceField(
queryset=Country.objects.all(),
widget=autocomplete.ListSelect2(
url='country-autocomplete',
)
)
state = forms.ModelChoiceField(
queryset=State.objects.all(),
widget=autocomplete.ListSelect2(
url='state-autocomplete',
forward=(forward.Field('country'),)
)
)
district = forms.ModelChoiceField(
queryset=District.objects.all(),
widget=autocomplete.ListSelect2(
url='district-autocomplete',
forward=(forward.Field('state'),)
)
)
# my view which handles MyInfoForm
class CountryView(FormView):
template_name = 'home.html'
form_class = MyInfoForm
success_url = '/thanks/'
def form_valid(self, form):
print("Request :", self.request.POST)
country = self.request.POST["country"]
state = self.request.POST["state"]
district = self.request.POST["district"]
msg = "You belong to {country}, {state}, {district}. Me too. ;)".format(
country=country, state=state, district=district)
return HttpResponse(msg)
# other auto-complete views (similar to official tutorials)
class CountryAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
if not self.request.user.is_authenticated():
return Country.objects.none()
qs = Country.objects.all()
if self.q:
qs = qs.filter(country_name__istartswith=self.q)
return qs
class StateAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
if not self.request.user.is_authenticated():
return State.objects.none()
qs = State.objects.all()
country = self.forwarded.get('country', None)
if country:
qs = qs.filter(country_name=country)
if self.q:
qs = qs.filter(state_name__istartswith=self.q)
return qs
class DistrictAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
if not self.request.user.is_authenticated():
return District.objects.none()
qs = District.objects.all()
state = self.forwarded.get('state', None)
if state:
qs = qs.filter(state_name=state)
if self.q:
qs = qs.filter(district_name__istartswith=self.q)
return qs
# models
class Country(models.Model):
country_name = models.CharField(max_length=30)
def __str__(self):
return self.country_name
class State(models.Model):
country_name = models.ForeignKey(Country)
state_name = models.CharField(max_length=30)
def __str__(self):
return self.state_name
class District(models.Model):
state_name = models.ForeignKey(State)
district_name = models.CharField(max_length=30)
def __str__(self):
return self.district_name
我应用了此SO答案中提到的但没有收获的内容。应用此解决方案无法填充state
和district
。
答案 0 :(得分:0)
只需调用对象,您的表单即可生效。自动填充指示灯配置为返回ID,这是“选择窗口小部件”的默认行为。
jacoco.exec