2016-05-03 135 views
1

我想在django中處理表單。我來自PHP背景,從未使用任何框架。我曾經自己在HTML和後端編寫表單的所有字段。我用我自己的方法來驗證它們。django形式與引導

現在,來到Django,它有模型的形式。但是,我想在我的代碼中使用引導程序。所以,我寫了這樣的HTML代碼:

<div class='form-group'> 
<label class='control-label col-md-2 col-md-offset-2' for='id_email'>Contact</label> 
<div class='col-md-6'> 
    <div class='form-group'> 
    <div class='col-md-11'> 
     <input class='form-control' id='id_email' placeholder='E-mail' type='text'> 
    </div> 
    </div> 
    <div class='form-group internal'> 
    <div class='col-md-11'> 
     <input class='form-control' id='id_phone' placeholder='Phone: (xxx) - xxx xxxx' type='text'> 
    </div> 
    </div> 
</div> 
</div> 

現在,我想驗證它在後端。我的模型看起來像:

class Student(models.Model): 

    def __str__(self): 
     return self.name 

    name = models.CharField(max_length=200) 
    enrollment_no = models.CharField(max_length=10) 
    batch = models.CharField(max_length=4) 
    father_income = models.IntegerField(max_length=100) 
    email = models.CharField(max_length=1000) 
    mobile_number = models.CharField(max_length=1000) 

現在,驗證上述表單的最佳方法是什麼? 請幫我解決這個問題。

+0

爲什麼不能在Meta類使用的ModelForm和定義部件在你的表單類?然後你可以確定你的表單元素以'引導友好'的方式呈現,例如'widgets ='name':forms.TextInput( attrs =''''''form-control', ' placeholder':'Title', 'required':True, } ),}'和您的字段仍然可以通過您的表單類進行驗證。 –

+0

你能否提供我有關這方面的任何文件?我是django的新手。謝謝。 – learner

+0

https://docs.djangoproject.com/en/1.9/topics/forms/modelforms/#overriding-the-default-fields –

回答

1

對於您的表單,您可以使用django的模型表單。你可以添加一些定義到模型的形式與class Meta

class StudentForm(forms.ModelForm): 

    class Meta: 
     model = Student 
     fields = [ 
      'name', 'enrollment_no', # etc... 
     ] 
     widgets = { 
      'name': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Title', 'required': True, }), 
      'enrollment_no': # etc... 
     } 

    # you can also override validation/clean/save/etc methods here 

*注 - 因爲所有的領域都需要(根據你的模型,因爲我們在這裏使用了一個模型的形式),Django會驗證要求所有字段。

在你的模板

然後(假設你傳遞的上下文中的表單實例,以模板爲form),您可以訪問像這樣每個字段:

... 
... 
<div class='col-md-11'> 
    {{ form.name }} 
</div> 
... 
...