Python探索のModelFormコード詳細
6879 ワード
これは不思議なコンポーネントで、名前を通じて私たちは見ることができて、このコンポーネントの機能はmodelとformを組み合わせて、はい、あなたは間違いなく、自分の英語のレベルを信じています.
まず簡単な例を見てみましょう
例えば、私たちのデータベースにはこのような学生表があります.フィールドには名前、年齢、趣味、メールボックス、電話、住所、登録時間などの情報がたくさんあります.今、学生を作成するページを書かせます.バックグラウンドはどう書きますか.
まず、フロントエンドにこれらのフィールドを羅列し、ユーザーに記入させます.その後、あさってからユーザーの入力を受信し、新しい学生オブジェクトを作成し、保存します.
実は、重点はこれらではなく、合法性の検証で、私たちはフロントエンドでユーザーの入力が合法かどうかを判断する必要があります.例えば、名前は何文字以内でなければなりませんか.電話番号は何桁の数字でなければなりませんか.メールボックスはメールボックスのフォーマットでなければなりません.
もちろん少しずつ手動で書くことができて、いろいろな判断、これは問題なくて、面倒を除いて
私たちは今もっと優雅な方法があります(後でPython関連の内容の中で、多く“優雅”という言葉を使って、そして習慣を身につけます)ModelForm
まず簡単に、硬いものを使って、検証条件を加えます.
まずModelFormをインポート
ビュー関数では、StudentListというクラスを定義します.このクラスはModelFormを継承し、このクラスに元のクラスMetaを書きます(書き方を規定し、頭文字が大文字であることに注意してください).
この元のクラスには、次の属性(部分)があります.
次にurl対応のビュー関数でこのクラスをインスタンス化し、このオブジェクトをフロントエンドに渡します.
そしてフロントエンドは{student_list.as_p}}だけで、すべてのフィールドが出てきます.as_pはすべて表示されますが、forループというstudent_リスト、手に入れたのはinputボックスです.今はasを使いません.p、手動でこれらのinputボックスを出して、as_pが手に入れたページは醜い.
まずforループというstudent_Listは、studentオブジェクトを取得し、直接フロントエンドにこのstudentを印刷し、inputボックスstudentである.label、データベース内の各フィールドのverbose_を取得name、このプロパティを設定していない場合、デフォルトはフィールド名です.
studentを通過することもできます.errors.0エラーメッセージを取得
これらがあればbootstrapで、自分で欲しいスタイルをつづることができます.
例:
まだinputボックスのform-contralスタイルが欠けています.バックグラウンドのwidgetに追加することも考えられます.
たとえば、
もちろんjsで、すべてのinputボックスを見つけて、このスタイルを加えてもいいです.
データを保存するときは、一つ一つデータを取る必要はありません.saveだけが必要です.
データの編集:
ModelFormを使わない場合は、編集時に前のデータを表示しなければならないでしょう.また、値を1回ずつ取らなければなりません.ModelFormの場合は、instance=obj(objは変更するデータベースのデータのオブジェクト)を1つ追加するだけで同じ効果が得られます.
保存するときは、必ずこのオブジェクト(instance=obj)があることに注意してください.そうしないと、どのデータを更新するか分かりません.
コードの例:
まとめ
以上,Python探索のModelFormコードの詳細について述べたすべての内容であり,皆さんの役に立つことを願っている.興味のある方は引き続き当駅:pythonプログラミング羊ドア問題コード例、pythonにおけるrequests使用エージェントproxies方法紹介などを参照してください.不足点があれば、コメントを歓迎します.友达の本駅に対する支持に感谢します!
まず簡単な例を見てみましょう
例えば、私たちのデータベースにはこのような学生表があります.フィールドには名前、年齢、趣味、メールボックス、電話、住所、登録時間などの情報がたくさんあります.今、学生を作成するページを書かせます.バックグラウンドはどう書きますか.
まず、フロントエンドにこれらのフィールドを羅列し、ユーザーに記入させます.その後、あさってからユーザーの入力を受信し、新しい学生オブジェクトを作成し、保存します.
実は、重点はこれらではなく、合法性の検証で、私たちはフロントエンドでユーザーの入力が合法かどうかを判断する必要があります.例えば、名前は何文字以内でなければなりませんか.電話番号は何桁の数字でなければなりませんか.メールボックスはメールボックスのフォーマットでなければなりません.
もちろん少しずつ手動で書くことができて、いろいろな判断、これは問題なくて、面倒を除いて
私たちは今もっと優雅な方法があります(後でPython関連の内容の中で、多く“優雅”という言葉を使って、そして習慣を身につけます)ModelForm
まず簡単に、硬いものを使って、検証条件を加えます.
まずModelFormをインポート
from django.forms import ModelForm
ビュー関数では、StudentListというクラスを定義します.このクラスはModelFormを継承し、このクラスに元のクラスMetaを書きます(書き方を規定し、頭文字が大文字であることに注意してください).
この元のクラスには、次の属性(部分)があります.
class StudentList(ModelForm):
class Meta:
model = models.Student # Model
fields = "__all__" # , __all__,
exclude = None #
labels = None #
help_texts = None #
widgets = None #
error_messages = None #
#error_messages :
error_messages = {
'name':{'required':" ",},
'age':{'required':" ",},
}
#widgets , input Textarea
#
from django.forms import widgets as wid # ,
widgets = {
"name":wid.Textarea(attrs={"class":"c1"}) #
}
#labels,
labels= {
"name":" "
}
次にurl対応のビュー関数でこのクラスをインスタンス化し、このオブジェクトをフロントエンドに渡します.
def student(request):
if request.method == 'GET':
student_list = StudentList()
return render(request,'student.html',{'student_list':student_list})
そしてフロントエンドは{student_list.as_p}}だけで、すべてのフィールドが出てきます.as_pはすべて表示されますが、forループというstudent_リスト、手に入れたのはinputボックスです.今はasを使いません.p、手動でこれらのinputボックスを出して、as_pが手に入れたページは醜い.
まずforループというstudent_Listは、studentオブジェクトを取得し、直接フロントエンドにこのstudentを印刷し、inputボックスstudentである.label、データベース内の各フィールドのverbose_を取得name、このプロパティを設定していない場合、デフォルトはフィールド名です.
studentを通過することもできます.errors.0エラーメッセージを取得
これらがあればbootstrapで、自分で欲しいスタイルをつづることができます.
例:
student
まだinputボックスのform-contralスタイルが欠けています.バックグラウンドのwidgetに追加することも考えられます.
たとえば、
from django.forms import widgets as wid # ,
widgets = {
"name":wid.TextInput(attrs={'class':'form-control'}),
"age":wid.NumberInput(attrs={'class':'form-control'}),
"email":wid.EmailInput(attrs={'class':'form-control'})
}
もちろんjsで、すべてのinputボックスを見つけて、このスタイルを加えてもいいです.
データを保存するときは、一つ一つデータを取る必要はありません.saveだけが必要です.
def student(request):
if request.method == 'GET':
student_list = StudentList()
return render(request,'student.html',{'student_list':student_list})
else:
student_list = StudentList(request.POST)
if student_list.is_valid():
student_list.save()
return redirect(request,'student_list.html',{'student_list':student_list})
データの編集:
ModelFormを使わない場合は、編集時に前のデータを表示しなければならないでしょう.また、値を1回ずつ取らなければなりません.ModelFormの場合は、instance=obj(objは変更するデータベースのデータのオブジェクト)を1つ追加するだけで同じ効果が得られます.
保存するときは、必ずこのオブジェクト(instance=obj)があることに注意してください.そうしないと、どのデータを更新するか分かりません.
コードの例:
from django.shortcuts import render,HttpResponse,redirect
from django.forms import ModelForm
# Create your views here.
from app01 import models
def test(request):
# model_form = models.Student
model_form = models.Student.objects.all()
return render(request,'test.html',{'model_form':model_form})
class StudentList(ModelForm):
class Meta:
model = models.Student # Model
fields = "__all__" # , __all__,
exclude = None #
labels = None #
help_texts = None #
widgets = None #
error_messages = None #
#error_messages :
error_messages = {
'name':{'required':" ",},
'age':{'required':" ",},
}
#widgets , input Textarea
#
from django.forms import widgets as wid # ,
widgets = {
"name":wid.Textarea
}
#labels,
labels= {
"name":" "
}
def student(request):
if request.method == 'GET':
student_list = StudentList()
return render(request,'student.html',{'student_list':student_list})
else:
student_list = StudentList(request.POST)
if student_list.is_valid():
student_list.save()
return render(request,'student.html',{'student_list':student_list})
def student_edit(request,pk):
obj = models.Student.objects.filter(pk=pk).first()
if not obj:
return redirect('test')
if request.method == "GET":
student_list = StudentList(instance=obj)
return render(request,'student_edit.html',{'student_list':student_list})
else:
student_list = StudentList(request.POST,instance=obj)
if student_list.is_valid():
student_list.save()
return render(request,'student_edit.html',{'student_list':student_list})
まとめ
以上,Python探索のModelFormコードの詳細について述べたすべての内容であり,皆さんの役に立つことを願っている.興味のある方は引き続き当駅:pythonプログラミング羊ドア問題コード例、pythonにおけるrequests使用エージェントproxies方法紹介などを参照してください.不足点があれば、コメントを歓迎します.友达の本駅に対する支持に感谢します!