15DjangoORM一对多模型类的创建以及数据的创建和查询

一对多模型类的创建:

class Publisher(models.Model):
    #出版社[一]
    name = models.CharField('出版社名称',max_length=50)

class Book(models.Model):
    #书【多】
    title = models.CharField("书名",max_length=50,default='',unique=True)
    publisher = models.ForeignKey(Publisher,on_delete=models.CASCAD,null=True)

一对多数据的创建和查询:

反向查询有一个方法:小写类名_set(此方法可以获取一个objects对象)

(venv) D:\PycharmProjects\mysite3>python manage.py shell

>>> from bookstore.models import *
>>> p1 = Publisher.objects.create(name="中信出版社")
#添加两本中信出版社的书                                             ^
>>> b1 = Book.objects.create(title="FastAPI",publisher=p1)
>>> b2 = Book.objects.create(title="Flask",publisher_id=p1.id)

#正向查询
>>> b1.publisher.name
'中信出版社'

#反向查询:
>>> p1.book_set.all()
<QuerySet [<Book: FastAPI__0.00_0.00>, <Book: Flask__0.00_0.00>]>

 

多对多模型的创建和数据的创建:

多对多关系:

mysql中创建多对多需要依赖第三张表来实现,但在django中无需手动创建第三张表,Django系统自动帮我们完成!

语法:在关联的两个类中的任意一个类中增加:

属性 = models.ManyToManyField(MyModel)

1多对多-模型创建:

class Author(models.Model):
    name = models.CharField('姓名',max_length=11,default='')

class Book(models.Model):
    title = models.CharField("书名",max_length=50,default='',unique=True)
    authors = models.ManyToManyField(Author)

2多对多-数据创建

#方法1:
先创建两作者,然后利用反向属性_set去操作和自己关联的表
author1 = Author.objects.create(name='吕老师')
author2 = Author.objects.create(name='王老师')
#吕老师和王老师同时写了一本书
book11 = author1.book_set.create(title='centos8') #创建本书同时和吕老师绑定
author2.book_set.add(book11)#已经有了一个本了,给书添加作者的方法

#方法2
book = Book.objects.create(name='centos8') #先创建一本书
#吕老师和王老师同时写了一本书
author3 = book.authors.create(name='王老师') #然后为数创建作者
book.authors.add(author1) #给书增加作者

练习:

(venv) D:\PycharmProjects\mysite3>python manage.py shell
>>> from bookstore.models import *
#创建第一个作者
>>> a1 = Author.objects.create(name='guolaoshi')
#创建一本书并绑定作者
>>> b1 = a1.book_set.create(title='centos8')
>>>
#创建第二个作者
>>> a2 = Author.objects.create(name='wanglaoshi')
#把作者和已存在的书关联
>>> a2.book_set.add(b1)
>>>

 3多对多-数据查询

#多对多查询测试:
def more_to_more_select_db(request):
    #from bookstore.models import *
    author_list=[]
    book_obj = Book.objects.get(title='centos8')
    author_obj=book_obj.authors.all().values("name")
    for ath in author_obj:
        author_list.append(ath)
    return HttpResponse("查询结果:%s"%author_list)

 

posted @ 2021-12-01 15:28  linuxTang  阅读(128)  评论(0)    收藏  举报