Получение выпадающего списка городов и стран 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, вы можете сделать это двумя различными способами:
- Отправить все эти вещи на фронт-енд и разобрать их на стороне фронт-енда или .
- Сделать конечную точку API и отвечать списком конкретных городов, когда пользователь выбрал страну.