パイソン - ジャンゴ - ORM-多くの操作

models.py:

django.db輸入モデルから


#出版社
クラスの出版社(models.Model):
    ID = models.AutoField(PRIMARY_KEY =真)
    名= models.CharField(max_lengthを= 64、ヌル= Falseの、ユニーク=真)

    デフ__str __(自己) :
        リターン"<出版物:{}>"形式(self.name)。 

书籍
クラスブック(models.Model):
    ID = models.AutoField(PRIMARY_KEY = TRUE)
    表題= models.CharField(MAX_LENGTH = 64、ヌル=偽、ユニーク= TRUE) 
    ()= "出版社"へのパブリッシャー= models.ForeignKey 

    デフ__str __(自己):
        リターン"<Bookオブジェクト:{}>"形式(self.title)。 

の作者の
クラスの著者(models.Model) : 
    ID = models.AutoField(PRIMARY_KEY = TRUE)
    名= models.CharField(max_lengthを= 16、偽= nullを、ユニーク=真)
    本= models.ManyToManyField(=「帳に 」)# 多くの関連テーブルブック、ORMは自動的に第三のテーブルが生成

    DEF __(自己)を__str:
        リターン『<著者オブジェクト:{}>』形式(self.name )

ブックテーブル:

authorテーブル:

著者と関連する第3のテーブルブック、author_bookテーブル:

パブリッシャーテーブル:

 

多くのクエリに多く:

orm.py:

OSのインポート

IF __name__ == '__main__': 負荷Djangoのプロジェクトの構成情報
    os.environ.setdefault( "DJANGO_SETTINGS_MODULE"、 "mysite2.settings") インポートジャンゴ、Djangoプロジェクトと開始
    インポートDjangoの
    django.setupを()

    app01からモデルインポート

    author_obj = models.Author.objects.get(ID = 2)#2のIDを得るために、
    RET = author_obj.book.all()#IDはクエリ2の作者によって書かれたすべての書籍
    の印刷(RET)

結果:

 

作成():

オブジェクトを保存、新しいオブジェクトを作成し、で設定し、関連するオブジェクトに追加し、新しく作成されたオブジェクトを返します。

orm.py:

import os

if __name__ == '__main__':
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app01 import models

    author_obj = models.Author.objects.get(id=1)  # 获取 id 为 1 的作者
    author_obj.book.create(title="《PHP》", publisher_id=2)  # 通过该作者创建一本书

运行结果:

 

add():

把指定的 model 对象添加到关联对象集中

orm.py:

import os

if __name__ == '__main__':
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app01 import models

    # 把 id 为 2 的书添加给 id 为 4 的作者
    author_obj = models.Author.objects.get(id=4)
    book_obj = models.Book.objects.get(id=2)
    author_obj.book.add(book_obj)
    
    # 也可以直接使用 id 添加
    # author_obj.book.add(2)

运行结果:

添加多个

orm.py:

import os

if __name__ == '__main__':
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app01 import models

    # 添加多个,把 id 大于 4 的书添加给 id 为 3 的作者
    author_obj = models.Author.objects.get(id=3)
    book_objs = models.Book.objects.filter(id__gt=4)
    author_obj.book.add(*book_objs)   # 要用 * 把列表打散再传进去

运行结果:

 

remove():

从关联对象集中移除执行的 model 对象。

orm.py:

import os

if __name__ == '__main__':
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app01 import models

    author_obj = models.Author.objects.get(id=3)
    book_obj = models.Book.objects.get(title="《PHP》")
    author_obj.book.remove(book_obj)  # 删除与 title 字段为 《PHP》 的关联
    author_obj.book.remove(5)  # 直接删除

运行结果:

原先 id 为 3 的作者关联的两本书籍本删除了

 

clear():

从关联对象集中清空一切对象。

orm.py:

import os

if __name__ == '__main__':
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app01 import models

    # 把 id 为 4 的作者的书籍全清空
    author_obj = models.Author.objects.get(id=4)
    author_obj.book.clear()

运行结果:

author_id=4 的内容全被清空了

 

set():

更新 model 对象的关联对象。

orm.py:

import os

if __name__ == '__main__':
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app01 import models

    # 给 id 为 4 的作者添加 id 为 2、3 的两本书
    author_obj = models.Author.objects.get(id=4)
    author_obj.book.set([2, 3])

运行结果:

 

外键补充:

外键中的 clear() 和 remove() 方法只能在 null=True 时用

models.py 中的 Book 类:

# 书籍
class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=64, null=False, unique=True)
    publisher = models.ForeignKey(to="Publisher", null=True)  # 把 null 设置为 True

    def __str__(self):
        return "<Book object: {}>".format(self.title)

orm.py:

import os

if __name__ == '__main__':
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app01 import models

    # 清空 id 为 2 的出版社中的书籍
    publisher_obj = models.Publisher.objects.get(id=2)
    publisher_obj.book_set.clear()

运行结果:

publisher_id 为 2 全变为 0

おすすめ

転載: www.cnblogs.com/sch01ar/p/11299321.html