Как использовать '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,
        }
Вернуться на верх