本文介绍了Django模型表单 - 设置必填字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 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

I have a model like above with country set to blank=True, null=True.

但是,以提交给最终用户的形式,我需要填写国家/地区字段。

However, in the form that is presented to the end user, I required the country field to be completed.

所以我重新定义了这样的模型窗体中的字段,以强制它成为必需的:

So I redefine the field in the Model Form like this to 'force' it to become required:

 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())

所以国家字段只是一个例子(其中有吨)。有更好的DRY方法吗?

So the country field is just an example (there are tons of them). Is there a better more DRY way of doing this?

推荐答案

您可以修改 __ init __ 。这是DRY,因为标签,查询器和其他一切将从模型中使用。这也可以用于覆盖其他东西(例如限制查询/选择,添加帮助文本,更改标签...)。

You can modify the fields in __init__ in the form. This is DRY since the label, queryset and everything else will be used from the model. This can also be useful for overriding other things (e.g. limiting querysets/choices, adding a help text, changing a label, ...).

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 = (...)

这是一篇博客文章,描述了相同的技术:

Here is a blog post that describes the same "technique": http://collingrady.wordpress.com/2008/07/24/useful-form-tricks-in-django/

这篇关于Django模型表单 - 设置必填字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 02:58