我在Django中为同一个模型创建了两个表单,名为AccountCreateForm
和AccountEditForm
。 Account
模型有三个字段,每个字段都有一些表单属性,例如max_length
,help_text
,error_messages
。例如,
class AccountCreateForm(forms.Modelform):
name = forms.CharField(max_length=50, required=True, label='Account Name', help_text='50 characters max', error_messages={'required': 'Please enter the account name'})
number = forms.CharField(max_length=16, required=True, label='Phone Number', help_text='10-16 digits max', error_messages={'required': 'Please enter the phone numbername'})
我希望用户也能够编辑现有帐户。所以,我添加了另一个表单用于编辑目的,如下所示。
class AccountEditForm(forms.Modelform):
name_error = { 'max_length': ("Name should be no longer than 50 characters."), 'required': ("Please enter the account name")}
number_error = {'max_length': ("Phone number should be between 10-16 characters."),'min_length': ("Phone number should be between 10-16 characters."),'required': ("Please enter the phone number tied to the Twilio account")}
name = forms.CharField(max_length=50, required=True, label='Account Name', help_text='50 characters max', error_messages=name_error)
number = forms.CharField(max_length=16, required=True, label='Phone Number', help_text='10-16 digits max', error_messages=number_error)
我的account_create.html
和account_edit.html
模板分享了这样的简单代码:
<form method="post">
{% csrf_token %}
<p>
{% for field in form %}
{{ field.errors }}
<label for="{{ field.id_for_label }}">{{ field.label }}({{ field.help_text }}):</label>
<br />
{{ field }}<br /><br />
{% endfor %}
</p>
<input class="btn btn-primary done-btn" type="submit" value="Create New Account">
</form>
它工作正常,Django有助于提供错误消息和帮助文本。但是,我觉得我在这里重复一些事情。我尝试了Django documentation page建议的方法,如下所示:
class AccountEditForm(forms.Modelform):
class Meta:
model = Account
fields = ('name', 'number')
labels = {'name' : _('Account Name'), 'number': _('Phone Number')}
error_messages = {
'name': {
'max_length': _("Name should be no longer than 50 characters."), 'required': ....}
等等。但是如果我故意离开,说name
字段,编辑形式为空白,Django不显示错误。它显示错误的唯一方法似乎是第一种方法。我能做些什么来提高代码质量(也就是说,不重复)?谢谢。
答案 0 :(得分:1)
有两种方法可以实现这一目标: -
1)通过添加&#39; blank = False&#39;来在模型中创建所需的名称字段。
name = models.CharField(blank=False)
2)如果您不想修改模型中字段的空白设置(这样做会破坏管理网站中的正常验证),您可以在Form类中执行以下操作:
def __init__(self, *args, **kwargs):
super(AccountEditForm, self).__init__(*args, **kwargs)
self.fields["name"].required = True