Как создать поле выбора со списком стран для формы в Django

#django #forms #drop-down-menu

#django #формы #выпадающее меню

Вопрос:

Я действительно новичок в django, и я создаю форму, и мне нужно поле выбора, чтобы пользователь мог выбрать свою страну. Я играю с полем выбора и создал отдельный py-файл со списком стран. мой макет выглядит примерно так:

файл формы:

из django import COUNTRIES # У меня есть py-файл со списком стран

страна = формы.Поле выбора (СТРАНЫ, метка =u’Country’)

Я вроде как не ожидал, что это сработает — я получил сообщение об ошибке, в котором говорится, что он не может импортировать страны имен. Я не знаю, какой шаг предпринять для достижения моей цели. Есть какие-нибудь полезные советы?

Комментарии:

1. Вы можете печатать manage.py shell и from django import COUNTRIES без каких-либо проблем? Я так не думаю. Пожалуйста, подтвердите.

Ответ №1:

вы можете импортировать модули таким же образом, как и в модуле python, отличном от django.

Модуль, который вы создали со списком стран, не является модулем django, поэтому вы не импортируете его из django.

Если у вас был файл, my_choices.py которое выглядело следующим образом:

extras.py

 COUNTRY_CHOICES = ( ('USA', 'USA'),
                    ('JPN', 'JAPAN'),
                    ('CAN', 'CANADA') )
  

и оно расположено в корневом каталоге вашего проекта:

 myproject/
|_ __init__.py
|_ my_choices.py
|_ settings.py
...
  

если ваш проект находится в PYTHONPATH, вы можете импортировать варианты, введя:

 >>> from my_choices import COUNTRY_CHOICES
>>> print COUNTRY_CHOICES
(('USA', 'USA'), ('JPN', 'JAPAN'), ('CAN', 'CANADA'))
>>> 
  

обычно я помещаю подобные материалы в папку utils:

 myproject/
|_ __init__.py
|_ utils/
   |_ __init__.py
   |_ my_choices.py
  

итак:

 >>> from utils.my_choices import COUNTRY_CHOICES
>>> COUNTRY_CHOICES
(('USA', 'USA'), ('JPN', 'JAPAN'), ('CAN', 'CANADA'))
>>> 
  

в вашем forms.py

 from utils.my_choices import COUNTRY_CHOICES

class SomeForm(forms.Form):
    country = forms.ChoiceField(choices=COUNTRY_CHOICES, label=u'Country')