2015-05-12 1 views
0

Я конвертирую опрос с Form в ModelForm в Django 1.6.2, но у меня возникла проблема с выбором правильного типа поля для ChoiceField. Опрос был выполнен с использованием SessionWizardView.Правильный способ перезаписи `forms.ChoiceField` в ModelField? Это модели.ForeignKey?

Мой вопрос: Каков правильный способ перезаписи приведенного ниже кода, который использовался в моих формах.py в мои models.py с помощью ModelForm?

старый код:

forms.py

class SurveyFormA(forms.Form): 

    MALE = 'M' 
    FEMALE = 'F' 

    SEX = (
     ("", "----------"), 
     (MALE, "Male"), 
     (FEMALE, "Female"), 
       ) 
    sex = forms.ChoiceField(widget=forms.Select(), choices=SEX, initial= "", label='What sex are you?', required = False) 

Ниже моя попытка, но от чтения documentation в котором перечислены соответствующие поля формы для каждого поля модели кроме ChoiceField, я не 100 % уверен, что я прав.

Новый код:

forms.py

class SurveyFormA(forms.ModelForm): 

    class Meta: 
     model = Person 
     fields = ['sex'] 

models.py

class Person(models.Model): 

    MALE = 'M' 
    FEMALE = 'F' 

    SEX = (
     (MALE, "Male"), 
     (FEMALE, "Female")) 

    sex = models.ForeignKey('Person', related_name='Person_sex', null=True, choices=SEX, verbose_name='What sex are you?') 

Правильно ли это?

ответ

0

Нет, это неправильно. Взгляните на Django's choices documentation.

Замените линию

sex = models.ForeignKey('Person', related_name='Person_sex', 
         null=True, choices=SEX, verbose_name='What sex are you?') 

с

sex = models.CharField(max_length=1, choices=SEX, 
         verbose_name='What sex are you?', null=True) 

Значение, хранящееся в базе данных будет "F" или "M", но Django будет отображать "Женский" или "Мужской" в ваш ModelForm. Есть хорошее объяснение об этом here.

Смежные вопросы