Djangoモデルクラスの操作データテーブル

1.プロジェクトを作成します

django-admin startproject my_first_django   # 创建一个名称为my_first_django的项目

コマンドの実行後、プロジェクト名とmanage.pyファイルを含むフォルダーが生成されます

manage.pyは、プロジェクトの管理ファイルです。

my_first_djangoの構造は次のとおりです。

                     

 

Django開発の機能モジュールはアプリケーションによって実装されます

2.アプリケーションを作成します

python manage.py startapp booktest        # 创建一个booktest的应用

                

アプリケーションを作成したら、登録する必要があります

my_first_djangoのsetting.pyファイルのINSTALLED_APPS構成アイテムを変更します。

djangoWebサービスを実行する

python manage.py runserver

ORM(Object-Relations-Mapping)の概要、DjangoにはデフォルトでORMフレームワークが組み込まれています

3.本のモデルを作成します

from django.db import models


# Create your models here.

# 设计和表对应的类 : 模型类

# 图书类
class BookInfo(models.Model):
    """
    图书模型类
    """
    bname = models.CharField(max_length=20)
    bpub_data = models.DateField()

Djangoは、モデルクラスに従ってデータベースに対応するテーブルを作成します

モデルクラス生成テーブルは、次の2つのステップに分かれています。

        1)移行ファイルを生成します

python manage.py makemigrations

        2)移行を実行してテーブルを生成します

python manage.py migrate

                            

データベースに作成されるテーブル名の形式は次のとおりです。applicationname_modelclass小文字

この例の表示は「booktest_bookinfo」です。

4.モデルクラスを介してデータテーブルを操作します(追加、削除、変更、およびチェック)

1)記録を増やす

from booktest.models import BookInfo
from datetime import date


# 数据库中增加记录
# 1 实例化模型类
# 2 添加实例属性    实例属性的名称需要了模型类中的类属性名称一致
# 3 实例调用save()方法完成记录的插入
b = BookInfo()
b.bname = "天龙八部"
b.bpub_data = data(1990,1,1)
b.save()

2)クエリレコード

from booktest.models import BookInfo


# 查询记录的步骤:
# 1 调用模型类的objects.get()方法 参数为查询条件
# 2 接收1中的返回的结果,类型了模型类的一个实例
# 3 查看 2 中实例的属性即可

b2 = BookInfo.objects.get(bname="天龙八部")
print(b2.bname)
print(b2.bpub_data)

(3)変更記録

from booktest.models import BookInfo


# 修改记录的步骤:
# 1 先查询到要修改的记录,得到其实例
# 2 对其实例属性进行修改
# 3 调用save()方法

b3 = BookInfo.objects.get(bname="天龙八部")
b3.bname = "天龙八部2"
b3.save()

4)レコードを削除する

from booktest.models import BookInfo


# 修改记录的步骤:
# 1 先查询到要修改的记录,得到其实例
# 2 调用该实例的delete()方法

b4 = BookInfo.objects.get(bname="天龙八部2")
b4.delete()

5.1対多の関係を追加します

説明:ヒーロークラスを追加します。ヒーローには、名前、性別、最後通牒、および起源の本の属性があります。本の起源は、本のテーブルの外部キーです。ブックリストとヒーローリストは1対多の関係にあります。

1)ヒーローモデルクラスを作成する

from django.db import models


# Create your models here.

# 设计和表对应的类 : 模型类

# 图书类
class BookInfo(models.Model):
    """
    图书模型类
    """
    bname = models.CharField(max_length=20)
    bpub_data = models.DateField()


# 英雄类
class HeroInfo(models.Model):
    """
    英雄模型类
    """
    h_name = models.CharField(max_length=20)
    h_gender = models.BooleanField(default=False)
    h_comment = models.CharField(max_length=128)
    h_book = models.ForeignKey("BookInfo", on_delete=models.CASCADE)

その中で、models.ForeignKey( "BookInfo"、on_delete = models.CASCADE)の場合、最初のパラメーターは「one」から「many」の「one」のクラス名であり、2番目のパラメーターは「one」「Multiple」を削除する場合です。 「アプローチ。models.CASCADEは、「1つ」を削除すると、対応する「複数」の削除が行われることを示します(カスケード削除)。

on_deleteの可能な値は次のとおりです:

  • CASCADE:これはデフォルトのオプションであるカスケード削除です。明示的に指定する必要はありません。
  • PROTECT:プロテクトモード。このオプションを使用すると、削除時にProtectedErrorエラーがスローされます。
  • SET_NULL:空白モード。削除する場合、外部キーフィールドは空に設定されます。ただしblank=True, null=True、フィールド定義されている場合は、空にすることができます。
  • SET_DEFAULT:デフォルト値を設定します。削除する場合、外部キーフィールドはデフォルト値に設定されますので、外部キーを定義する際はデフォルト値の追加に注意してください。
  • SET():値をカスタマイズします。もちろん、対応するエンティティのみにすることができます

2)移行ファイルを更新して実行します(3.1および3.2を参照)。

3)ヒーローレコードを追加する

import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_first_django.settings")  # my_first_django 项目名称
django.setup()


from booktest.models import BookInfo, HeroInfo
from datetime import date

b1 = BookInfo()
b1.bname = "天龙八部"
b1.bpub_data = date(1989, 10, 5)
b1.save()

b2 = BookInfo()
b2.bname = "神雕侠侣"
b2.bpub_data = date(1999, 1, 20)
b2.save()

h1 = HeroInfo()
h1.h_name = "乔峰"
h1.h_gender = False
h1.h_comment = "降龙十八掌"
# 注意 在添加英雄的h_book属性时类型为 BookInfo的实例
h1.h_book = b1
h1.save()

h2 = HeroInfo()
h2.h_name = "段誉"
h2.h_gender = False
h2.h_comment = "六脉神剑"
h2.h_book = b1
h2.save()

h3 = HeroInfo()
h3.h_name = "杨过"
h3.h_gender = False
h3.h_comment = "独臂神功"
h3.h_book = b2
h3.save()

h3 = HeroInfo()
h3.h_name = "小龙女"
h3.h_gender = True
h3.h_comment = "睡树枝"
h3.h_book = b2
h3.save()

       

booktest_heroinfoテーブルにh_book_idフィールドがあります。これは、class属性のh_bookに対応します。

4)主人公の本の属性を表示する

hero = HeroInfo.objects.get(h_name="小龙女")
print(hero.h_name)
print(hero.h_gender)
print(hero.h_book)
print(hero.h_book.bname)
print(hero.h_book_id)

5)特定のタイトルに対応するすべてのヒーローを表示する

# 查询书籍的对象

b1 = BookInfo.objects.get(bname="天龙八部")
print(b1.bname)

# 查询书籍对应的所有英雄   使用 b1.heroinfo_set.all() 返回的是一个列表,里面存放的是每个英雄的实例

for hero in b1.heroinfo_set.all():
    print(hero.h_name)
    print(hero.h_comment)
    print()

6)クエリテーブルのすべてのコンテンツ

# 返回一个列表,列表里面是每本书的实例
BookInfo.objects.all()

おすすめ

転載: blog.csdn.net/qq_39197555/article/details/113809570