Получение выпадающего списка городов и стран Django

Я пытаюсь создать зависимый выпадающий список стран и городов, на основе выбранной страны я хочу иметь другой выпадающий список городов в этой стране. В моей модели Django без создания моделей для страны и города.

Вот мой код:

models.py

from django.db import models
from django_countries.fields import CountryField
from partial_date import PartialDateField

class School(models.Model):
    school_name = models.CharField(max_length = 30)
    school_country = CountryField()
    school_city = ??
    school_population = models.IntegerField()
    school_description = models.TextField(max_length = 300)
    year_build = PartialDateField()
    total_branches = models.IntegerField()
    school_fees = models.IntegerField()
    school_images = models.FileField(default=None)

    def __str__(self):
        return self.school_name 

Я смог получить страны, используя django-countries school_country = CountryField(), но я понятия не имею, как сделать то же самое для городов. Я посмотрел на django-cities, но не понял, как его использовать

Django Field Choices. Согласно документации Field Choices - это последовательность, состоящая из итераций ровно из двух элементов (например, [(A, B), (A, B) ...]) для использования в качестве вариантов для некоторого поля

from django.db import models
from django_countries.fields import CountryField
from partial_date import PartialDateField

SCHOOL_CITIES_CHOICES = (
    ("Newyork", "Newyork"),
    ("Dubai", "Dubai"),
    ("Arusha", "Arusha"),
    ("Nairobi", "Nairobi"),
    ("West papua", "West Papua"),
    )


class School(models.Model):

    school_name = models.CharField(max_length = 30)
    school_country = CountryField()
    school_city =  models.CharField(
        max_length = 20,
        choices = SCHOOL_CITIES_CHOICES,
        default = '1'
        )
    school_population = models.IntegerField()
    school_description = models.TextField(max_length = 300)
    year_build = PartialDateField()
    total_branches = models.IntegerField()
    school_fees = models.IntegerField()
    school_images = models.FileField(default=None)

    def __str__(self):
        return self.school_name 

Это вопрос по Python, а не по Django.

Вам просто нужна структура, которая отвечает на ваш вопрос. Это может быть простой словарь, например, такой:

{
   "USA": ["New York", "..."],
   "Canada": ["Ottawa", ".."]
}

и вы можете хранить его в отделенном файле в проекте.

Так что вы можете использовать .keys() для списка стран, которые вы поддерживаете, и вы можете использовать определенную страну в качестве ключа для получения списка городов.

Если вам нужно показать эту структуру во front-end, вы можете сделать это двумя различными способами:

  1. Отправить все эти вещи на фронт-енд и разобрать их на стороне фронт-енда или
  2. .
  3. Сделать конечную точку API и отвечать списком конкретных городов, когда пользователь выбрал страну.
Вернуться на верх