Django Countries
django-countries предоставляет поле для выбора стран с поддержкой ISO 3166-1 кодов.
Установка
1# Установка пакета
2pip install django-countries
1# Или через Poetry
2poetry add django-countries
Использование в моделях
1from django_countries.fields import CountryField
2
3class User(models.Model):
4 name = models.CharField(max_length=100)
5 country = CountryField()
6
7 def __str__(self):
8 return f"{self.name} from {self.country.name}"
В формах
1from django_countries.widgets import CountrySelectWidget
2
3class UserForm(forms.ModelForm):
4 class Meta:
5 model = User
6 fields = ['name', 'country']
7 widgets = {
8 'country': CountrySelectWidget(),
9 }
Работа с данными
1# Получение информации о стране
2user.country.code # 'RU'
3user.country.name # 'Russia'
4user.country.flag # '🇷🇺'
5
6# Фильтрация по странам
7russian_users = User.objects.filter(country='RU')
8
9# Получение всех стран
10from django_countries import countries
11all_countries = countries
Кастомизация списка стран
1# settings.py
2COUNTRIES_OVERRIDE = {
3 'RU': 'Россия',
4 'US': 'Соединенные Штаты',
5}
6
7# Исключить определенные страны
8COUNTRIES_EXCLUDE = ['XX', 'YY']
9
10# Изменить порядок стран
11COUNTRIES_FIRST = ['RU', 'US', 'GB']
12COUNTRIES_FIRST_BREAK = '---'
FAQ
Q: Как кастомизировать список стран?
A: Используй COUNTRIES_OVERRIDE в settings.py.
Q: Можно ли получить флаг страны?
A: Да, используй свойство flag для получения эмодзи флага.