ホームページ  >  記事  >  バックエンド開発  >  Django の ModelForm コンポーネントの概要 (コード例)

Django の ModelForm コンポーネントの概要 (コード例)

不言
不言転載
2019-03-13 13:23:172354ブラウズ

この記事では、Django の ModelForm コンポーネントの概要 (コード例) を紹介します。これには特定の参考値があります。必要な友人は参照できます。お役に立てば幸いです。help 。

通常、Django プロジェクトでは、私たちが記述するもののほとんどは、Django のモデルに密接にマップされたフォームです。たとえば、Book モデルがあり、そのモデルに書籍情報を追加および編集するためのフォームを作成するとします。この場合、それらのフィールドはモデル内ですでに定義されているため、フォーム内でのフィールドの定義は冗長になります。

このため、Django は、Django のモデル (ModelForm) からフォームを作成できる補助クラスを提供します。

モデルフォーム定義

フォームとモデルの組み合わせ。

from django import forms
from crm import models

class RegForm(forms.ModelForm):
    password = forms.CharField(
        widget=forms.PasswordInput,
        label='密码',
        min_length=6,
        max_length=12
    )
    re_password = forms.CharField(
        widget=forms.PasswordInput,
        label='确认密码',
        min_length=6,
        max_length=12
    )
    mobile = forms.CharField(

    )
    class Meta:
        model = models.UserProfile  # 指定model
        fields = '__all__'  # 全部字段
        # fields = ['username','password']  # 指定字段
        exclude = ['is_active']  # 除某个字段之外的其余字段
        labels = {
            'username':'用户名'
        }
        error_messages = {
            'min_length': '太短了',
        }
        widgets = {
            'username': forms.TextInput(attrs={'placeholder': '用户名@xx.com'}),
        }

class Meta で一般的に使用されるパラメータ:

model = models.Book  # 对应的Model中的类
fields = "__all__"  # 字段,如果是__all__,就是表示列出所有的字段
exclude = None  # 排除的字段
labels = None  # 提示信息
help_texts = None  # 帮助提示信息
widgets = None  # 自定义插件
error_messages = None  # 自定义错误信息

ModelForm validation

通常の Form フォーム検証タイプと同様に、ModelForm フォーム検証では is_valid() を呼び出すか、エラーにアクセスする必要があります。プロパティを使用するときに暗黙的に。

ローカル フック メソッドとグローバル フック メソッドをカスタマイズして、Form クラスを使用するのと同じようにカスタム検証ルールを実装できます。

特定のフィールドを書き換えず、validators 属性を設定しない場合、ModelForm はモデル内のフィールドのバリデーターに従って検証されます。

save() メソッド

各 ModelForm には save() メソッドもあります。このメソッドは、フォームにバインドされたデータに基づいてデータベース オブジェクトを作成および保存します。 ModelForm のサブクラスは、既存のモデル インスタンスをキーワード引数インスタンスとして受け入れることができます。この機能が提供されている場合、save() はインスタンスを更新します。指定しない場合、save() はモデルの新しいインスタンスを作成します:

>>> from myapp.models import Book
>>> from myapp.forms import BookForm

# 根据POST数据创建一个新的form对象
>>> form_obj = BookForm(request.POST)

# 创建书籍对象
>>> new_ book = form_obj.save()

# 基于一个书籍对象创建form对象
>>> edit_obj = Book.objects.get(id=1)
# 使用POST提交的数据更新书籍对象
>>> form_obj = BookForm(request.POST, instance=edit_obj)
>>> form_obj.save()

以上がDjango の ModelForm コンポーネントの概要 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。