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/