Как использовать 'dependent_fields' в django easy-select2
Я использую easy-select2 для настройки некоторых выпадающих меню.
Я хотел бы установить выпадающий список, который зависит от ранее выбранного поля.
То есть после выбора "страны" я хочу, чтобы выпадающее меню "города" показывало только города из этой страны.
Я предполагаю, что это должно быть сделано путем создания нового виджета с 'dependent_fields', но у меня не получается сделать это.
Я почти уверен, что не создаю новый виджет правильно.
models.py:
from django.db import models
class Country(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class City(models.Model):
country = models.ForeignKey(Country, on_delete=models.CASCADE)
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class Person(models.Model):
name = models.CharField(max_length=100)
birthdate = models.DateField(null=True, blank=True)
country = models.ForeignKey(Country, on_delete=models.SET_NULL, null=True)
city = models.ForeignKey(City, on_delete=models.SET_NULL, null=True)
def __str__(self):
return self.name
views.py:
from django.shortcuts import render
from django.views.generic import ListView, CreateView, UpdateView
from django.urls import reverse_lazy
from .models import Person, City
from .forms import PersonForm
class PersonListView(ListView):
model = Person
context_object_name = 'people'
class PersonCreateView(CreateView):
model = Person
form_class = PersonForm
success_url = reverse_lazy('person_changelist')
class PersonCreateView(CreateView):
model = Person
form_class = PersonForm
context_object_name = "perons"
template_name = "hr/person_form.html"
success_url = reverse_lazy('person_changelist')
forms.py:
from django import forms
from .models import Person, Country, City
from easy_select2 import Select2
class CountryWidget(Select2):
model=Country
search_fields = [
"name__icontains",
]
dependent_fields = {
"city": "city",
}
attrs={'data-width': '100%'}
class CityWidget(Select2):
model=City
search_fields = [
"name__icontains",
]
dependent_fields : {
"country": "country",
}
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ("country", "city", )
widgets = {
"country": CountryWidget,
"city": CityWidget,
}