我在Django中爲同一個模型創建了兩個表單,名爲AccountCreateForm
和AccountEditForm
。 Account
模型有三個字段,每個字段都有幾個表單屬性,如max_length
,help_text
,error_messages
。例如,如何在Django表單中創建和編輯表單幹我(我自己)
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不顯示錯誤。它會顯示錯誤的唯一方式似乎是第一種方法。有什麼我可以做的,以提高代碼質量(即,不重複)?謝謝。通過添加「空白=假」
1)使模型內部所需的名稱字段 - :
感謝您的回答。但我認爲在model.py文件中這樣分配:'forms.CharField(max_length = 50,required = True)'就足夠了?爲什麼我們需要在Form類中重複該操作? – user1330974
答案是針對你的第二個案例。另外添加required = True在窗體上不起作用。要添加表單級別驗證,您需要將空白= false添加到您的模型字段聲明中。 – mukesh
感謝您的額外答覆。 – user1330974