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 для получения эмодзи флага.