Как установить queryset в forms.Form(ModelChoiceField) для выпадающего городского списка?
Я установил ForeignKey()
для класса Town в файле models. В идеале, когда я выбираю государство, все города, принадлежащие этому государству, будут перечислены в town.
#models.py
class State(models.Model):
state = models.CharField(max_length=50)
code = models.CharField(max_length=3)
def __str__(self):
return self.state
class Town(models.Model):
town = models.CharField(max_length=50)
code = models.CharField(max_length=4)
state = models.ForeignKey(State, on_delete=models.CASCADE)
def __str__(self):
return self.town
Теперь я могу использовать только all()
в queryset для отображения всех городов.
Мне кажется, что я должен использовать filter()
, но я не могу найти способ сделать это。
#forms.py
class Location(forms.Form):
state = forms.ModelChoiceField( required = True,
label = "State",
queryset = State.objects.all(),
widget = forms.Select(attrs = {
"class": "form-list-field"}
))
town = forms.ModelChoiceField( required = True,
label = "Town",
queryset = Town.objects.filter( ??? ).order_by('town'),
widget = forms.Select(attrs = {
"class": "form-list-field"}
))
вы можете достичь этого, используя
- Django формы
- ajax-запросы
forms.py
class Location(forms.Form):
state = forms.ModelChoiceField(
required=True,
label="State",
queryset=State.objects.all(),
widget=forms.Select(attrs={"class": "form-list-field"}),
)
town = forms.ModelChoiceField(
required=True,
label="Town",
queryset=Town.objects.none(),
widget=forms.Select(attrs={"class": "form-list-field"}),
) # need to populate this using jquery
теперь напишите метод в представлении для возврата городов на основе выбранного состояния
views.py
from django.http import HttpResponse
def get_towns(request, state_id):
state = State.objects.get(pk=state_id)
towns = Town.objects.filter(state=state)
towns_dict = {}
for town in towns:
towns_dict[town.id] = town.town
return HttpResponse(towns_dict, content_type='application/json')
в вашем html или API коде сделайте ajax запрос для получения списка городов при выборе штата
Я уже создал мини проект для достижения этих вещей. Он называется dependent drop-down
Plz clone this repo and run it.
Ссылка находится здесь