ORMバージョン2研修生管理システム

学生情報管理

学生情報の表示

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'

おすすめ

転載: www.cnblogs.com/2020-520/p/12343000.html