学生情報管理
学生情報の表示
URLセクション
URL(R '^ student_list /'、app01_views.student_list、名前= "student_list")、
表示セクション
デフstudent_list(リクエスト): student_list = models.Student.objects.all() リターンレンダリング(リクエスト、 "student_list.html"、{ "student_list":student_list})
フロントセクション
<!DOCTYPE HTML> <HTMLのlang = "ZH-CN"> <ヘッド> <メタ文字セット= "UTF-8"> <メタHTTP-当量= "X-UA-互換" コンテンツ= "IE =エッジ"> <メタ名=「ビューポート」コンテンツ=「幅=デバイス幅、初期スケール= 1」> <タイトル>学生一覧</ TITLE> </ head>の <身体> <a href="{% URL'add_student' %}">添加学生</a>の <テーブルのボーダー= "1"> <THEAD> <TR> <番目>#</目> <TH>番号</番目> <TH>学生の名前</目> <TH>学生クラス</目> <TH>開始日</目> <TH>操作</目> </ TR> </ THEAD> <TBODY> {student_list%の学生のための%} <TR> <TD> {{forloop.counter}} </ TD> <TD> {{student.id}} </ TD> <TD> {{student.sname}} </ TD> <TD> {{student.cid.cname}} </ TD> <TD> {{student.cid.first_day |日付: 'はYmd'}} </ TD> <TD> <a href="{% URL'delete_student' student.id %}">删除する</a> <a href="{% URL'edit_student' student.id %}">编辑する</a> </ TD> </ TR> {%ENDFOR%} </ TBODY> </ TABLE> </ BODY> </ HTML>
削除学生情報
URLセクション
URL(R '^ delete_student /(?P <SID> \ D +)$'、app01_views.delete_student、名前= "delete_student")、
表示セクション
デフdelete_student(リクエスト、SID): models.Student.objects.filter(ID = SID).delete() リターンリダイレクト(リバース( "student_list"))
フロントセクション
<a href="{% URL'delete_student' student.id %}">删除する</a>
学生情報を追加します。
URLセクション
URL(R '^ add_student / $'、app01_views.add_student、名前= "add_student")、
表示セクション
デフadd_student(リクエスト): request.method == "POST" の場合: SNAME = request.POST.get( "SNAME") CLASS_ID = request.POST.get( "CLASS_ID") models.Student.objects.create(SNAME = SNAME、cid_id = CLASS_ID) リターンリダイレクト(リバース( "student_list")) class_list = models.Class.objects.all() リターンレンダリング(リクエスト、 "add_student.html"、{ "class_list":class_list})
フロントセクション
<!DOCTYPE HTML> <HTMLのlang = "ZH-CN"> <ヘッド> <メタ文字セット= "UTF-8"> <メタHTTP-当量= "X-UA-互換" コンテンツ= "IE =エッジ"> <メタ名=「ビューポート」コンテンツ=「幅=デバイス幅、初期スケール= 1」> <タイトル>学生</タイトル>を追加 </ head>の <身体> <FORM ACTION = "{%URL 'add_student' %}" METHOD = "POST"> {%csrf_token%} <P>学生姓名:の<input type = "text" の名= "SNAME"> </ P> <= "CLASS_ID" のラベル>ここで、クラス:</ label>は <選択名= "CLASS_ID" ID = "CLASS_ID"> {class_list%でクラスの%} <オプション値= "{{class.id}}"> {{class.cname}} </オプション> {%ENDFOR%} </ select>の <P>の<input type = "提交" 値= "を提出する"> </ P> </フォーム> </ BODY> </ HTML>
生徒の情報を編集します
URLセクション
URL(R '^ edit_student /(?P <SID> \ D +)$'、app01_views.edit_student、名前= "edit_student")、
表示セクション
デフedit_student(リクエスト、SID): #学生がオブジェクトを編集するには、Get student_obj = models.Student.objects.get(ID = SID) #すべてのデータクラスを取得します。 class_list = models.Class.objects.all() request.method == "POST" の場合: SNAME = request.POST.get( "SNAME") CLASS_ID = request.POST.get( "CLASS_ID") student_obj.snameはオフ= student_obj.cid_id = CLASS_ID student_obj.save() リターンリダイレクト(リバース( "student_list")) リターンレンダリング(リクエスト、 "edit_student.html"、{ "学生":student_obj、 "class_list":class_list})
フロントセクション
<!DOCTYPE HTML> <HTMLのlang = "ZH-CN"> <ヘッド> <メタ文字セット= "UTF-8"> <メタHTTP-当量= "X-UA-互換" コンテンツ= "IE =エッジ"> <メタ名=「ビューポート」コンテンツ=「幅=デバイス幅、初期スケール= 1」> <タイトル>編集学生情報</ TITLE> </ head>の <身体> <FORM ACTION = "{%URL 'edit_student' student.id%}" METHOD = "POST"> {%csrf_token%} <P>学生姓名:の<input type = "text" の名= "SNAME" 値= "{{student.sname}}"> </ P> <= "CLASS_ID" のラベル>ここで、クラス:</ label>は <選択名= "CLASS_ID" ID = "CLASS_ID"> {class_list%でクラスの%} {%ならclass.id == student.cid_id%} <オプション値= "{{class.id}}" を選択> {{class.cname}} </オプション> {% そうしないと %} <オプション値= "{{class.id}}"> {{class.cname}} </オプション> {%ENDIF%} {%ENDFOR%} </ select>の <P>の<input type = "提交" 値= "を提出する"> </ P> </フォーム> </ BODY> </ HTML>
クロステーブルのクエリオブジェクトに基づいて、
多くのクエリ(クラステーブルと学生テーブル)
(学生・テーブルクエリクラステーブルから)フォワードクエリ
Queryクラスの学生情報
>>> student_obj = models.Student.objects.first() でオブジェクトクラス属性モデルに対応するデータを検索する>>> student_obj.cid#外部キー <クラス:Classオブジェクト> >>> student_obj.cid.cname 「クラス1」 >>> student_obj.cid_id#GET外部キーの実際の値 1
(学生のクラステーブルのルックアップテーブルによって)逆引き
Queryクラスの学生情報
>>> CLASS_OBJ = models.Class.objects.first()#は、ファーストクラスのオブジェクトを取得します >>> class_obj.student_set.all()#逆引きテーブル名_setにより、すべての学生 <クエリセット[<学生:学生オブジェクト>、<学生:学生対象>]>
注意:
外部キーフィールドrelated_nameセットした場合、デフォルトではテーブル名を_setます。
あなたはrelated_name =「学生」を設定した場合、学生は逆引き参照を実行すると、逆引き参照を直接使用することができます。
>>> class_obj.students.all()
一つのクエリ
テーブルデザイン
クラス学生(models.Model): SNAME = models.CharField(MAX_LENGTH = 32、verbose_name = "学生姓名") the_class = models.ForeignKey(クラス、to_field = "ID" =に、on_delete = models.CASCADE、related_name = "学生") 詳細= models.OneToOneField(= "StudentDetail" に、ヌル=真) クラスStudentDetail(models.Model): 高さ= models.PositiveIntegerField() 重量= models.PositiveIntegerField() メール= models.EmailField()
フォワードクエリ(学生情報シートの詳細テーブルで学生を照会)
>>> student_obj = models.Student.objects.first() >>> student_obj.detail.email '[email protected]'
逆引き参照(学生の学生情報テーブルの詳細によって逆ルックアップテーブル)
>>> detail_obj = models.StudentDetail.objects.get(ID = 1) >>> detail_obj.student.sname 'A'