<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ## ModelForm 大家在寫表單的時候,會發現表單中的Field和模型中的Field基本上是一模一樣的,而且表單中需要驗證的數據,也就是我們模型中需要保存的。那么這時候我們就可以將模型中的字段和表單中的字段進行綁定。 比如現在有個Article的模型。 ``` from django.db import models from django.core import validators class Article(models.Model): title = models.CharField(max_length=10,validators=[validators.MinLengthValidator(limit_value=3)]) content = models.TextField() author = models.CharField(max_length=100) category = models.CharField(max_length=100) create_time = models.DateTimeField(auto_now_add=True) ``` 那么在寫表單的時候,就不需要把Article模型中所有的字段都一個個重復寫一遍了。 ``` from django import forms class MyForm(forms.ModelForm): class Meta: model = Article fields = "__all__" ``` MyForm是繼承自forms.ModelForm,然后在表單中定義了一個Meta類,在Meta類中指定了model=Article,以及fields="__all__",這樣就可以將Article模型中所有的字段都復制過來,進行驗證。如果只想針對其中幾個字段進行驗證,那么可以給fields指定一個列表,將需要的字段寫進去。比如只想驗證title和content,那么可以使用以下代碼實現 ``` from django import forms class MyForm(forms.ModelForm): class Meta: model = Article fields = ['title','content'] ``` 如果要驗證的字段比較多,只是除了少數幾個字段不需要驗證,那么可以使用exclude來代替fields。比如我不想驗證category,那么示例代碼如下: ``` class MyForm(forms.ModelForm): class Meta: model = Article exclude = ['category'] ``` ### 自定義錯誤消息 使用ModelForm,因為字段都不是在表單中定義的,而是在模型中定義的,因此一些錯誤消息無法在字段中定義。那么這時候可以在Meta類中,定義error_messages,然后把相應的錯誤消息寫到里面去。 ``` class MyForm(forms.ModelForm): class Meta: model = Article exclude = ['category'] error_messages ={ 'title':{ 'max_length': '最多不能超過10個字符!', 'min_length': '最少不能少于3個字符!' }, 'content': { 'required': '必須輸入content!', } } ``` ### save方法 ModelForm還有save方法,可以在驗證完成后直接調用save方法,就可以將這個數據保存到數據庫中了 ``` form = MyForm(request.POST) if form.is_valid(): form.save() return HttpResponse('succes') else: print(form.get_errors()) return HttpResponse('fail') ``` 這個方法必須要在clean沒有問題后才能使用,如果在clean之前使用,會拋出異常。另外,我們在調用save方法的時候,如果傳入一個commit=False,那么只會生成這個模型的對象,而不會把這個對象真正的插入到數據庫中。比如表單上驗證的字段沒有包含模型中所有的字段,這時候就可以先創建對象,再根據填充其他字段,把所有字段的值都補充完成后,再保存到數據庫中。 ``` form = MyForm(request.POST) if form.is_valid(): article = form.save(commit=False) article.category = 'Python' article.save() return HttpResponse('succes') else: print(form.get_errors()) return HttpResponse('fail') ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看