Django Model Forms - установка необходимого поля

 15 class Profile(models.Model):
 16     """
 17     User profile model
 18     """
 19     user = models.ForeignKey(User, unique=True)
 20     country = models.CharField('Country', blank=True, null=True, default='',\
 21                                max_length=50, choices=country_list())
 22     is_active = models.BooleanField("Email Activated")

У меня есть модель, подобная выше, с country установлена ​​на blank=True, null=True.

Однако в форме, представленной конечному пользователю, мне нужно заполнить поле страны.

Итак, я переопределяю поле в форме модели, как это, чтобы заставить его стать необходимым:

 77 class ProfileEditPersonalForm(forms.ModelForm):
 78 
 79     class Meta:
 80         model = Profile
 81         fields = ('email',
 82                   'sec_email',  
 83                   'image',
 84                   'first_name',
 85                   'middle_name',
 86                   'last_name',
 87                   'country',
 88                   'number',
 89                   'fax',)
 90 
 98     country =  forms.ChoiceField(label='Country', choices = country_list())

Итак, поле страны - всего лишь пример (их много). Есть ли более суровый способ сделать это?

Ответы

Ответ 1

Вы можете изменить поля в __init__ в форме. Это СУХОЙ, поскольку метка, запрос и все остальное будут использоваться из модели. Это также может быть полезно для переопределения других вещей (например, ограничение запросов/выбора, добавление текста справки, изменение метки,...).

class ProfileEditPersonalForm(forms.ModelForm):    
    def __init__(self, *args, **kwargs):
        super(ProfileEditPersonalForm, self).__init__(*args, **kwargs)
        self.fields['country'].required = True

    class Meta:
        model = Profile
        fields = (...)

Вот сообщение в блоге, в котором описывается одна и та же "техника": http://collingrady.wordpress.com/2008/07/24/useful-form-tricks-in-django/