Вам нужно создать собственный виджет, чтобы выбрать модель города (то есть ваша модель должна быть FK в город, а не в штат), этот виджет содержит два поля выбора, первое из которых содержит состояния, а второе загружается на выбор штата (вам нужно подключить представление, чтобы вернуть города на основе идентификатора штата, чтобы заполнить ваш выбор города).
Вы должны установить свои виджеты Внутренний класс Media указывает на конкретный файл .js, объединяющий оба Select.
В спецификации ModelAdmin установите виджет вашего поля на пользовательский виджет, который вы только что создали, и его медиа будет автоматически добавлен в шаблон change_form.
Убедитесь, что ваш файл .js ищет ваш обычный объект JQuery и возвращается к django.JQuery, так что вы можете использовать этот же виджет в админке и во всем вашем сайте.
(function($) {
// Note that this function works only for one widget per page
$('#state').change(function(){
$('#city').load('/cities_by_state/', {id: this.value}); // the endpoint returns HTML
});
})(JQuery||django.JQuery);
Я сделал нечто похожее в приложении, которое я использую локально для своих проектов (с переменной глубиной до трех уровней), и полученное решение оказалось немного сложным, так как оно должно было поддерживать несколько виджетов на страницу, динамические виджеты (для встроенных ), шаблоны тегов для отображения виджета в различных формах и т. д.