2015-06-14 35 views
0

我在Django中爲同一個模型創建了兩個表單,名爲AccountCreateFormAccountEditFormAccount模型有三個字段,每個字段都有幾個表單屬性,如max_lengthhelp_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.htmlaccount_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)使模型內部所需的名稱字段 - :

回答

1

可以有兩種方法可以做到這一點。

name = models.CharField(blank=False) 

2)如果你不希望修改空白設置爲內部模型(這樣做你的字段將打破管理站點正常驗證),你可以做你的窗體類以下內容:

def __init__(self, *args, **kwargs): 
    super(AccountEditForm, self).__init__(*args, **kwargs) 

    self.fields["name"].required = True 
+0

感謝您的回答。但我認爲在model.py文件中這樣分配:'forms.CharField(max_length = 50,required = True)'就足夠了?爲什麼我們需要在Form類中重複該操作? – user1330974

+1

答案是針對你的第二個案例。另外添加required = True在窗體上不起作用。要添加表單級別驗證,您需要將空白= false添加到您的模型字段聲明中。 – mukesh

+0

感謝您的額外答覆。 – user1330974

相關問題