先在models中创建表,以及建立各表之间的关系:
class Publisher(models.Model):
name = models.CharField(max_length=32)
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5,decimal_places=2) # 999.99
publisher = models.ForeignKey(\'Publisher\',null=True ,related_name=\'books\', related_query_name=\'book\',on_delete=models.CASCADE)
class Author(models.Model):
name = models.CharField(max_length=32)
books = models.ManyToManyField(\'Book\',related_name=\'authors\')
表示一对多的关系:
# 基于对象
#
# 正向查询 book ——》 publisher
#
# book_obj.publisher ——》 所关联的出版社对象
# book_obj.publisher.name ——》 所关联的出版社对象名称
# book_obj.publisher.pk ——》 所关联的出版社对象主键
# book_obj.publisher_id ——》 从book中直接拿到所关联对象的id
#
# 反向查询 publisher ——》 book
#
# 不指定related_name
# pub_obj.book_set ——》 关系管理对象
# pub_obj.book_set.all() ——》 出版社出版所有的书籍对象
# 指定related_name=\'books\'
# pub_obj.books ——》 关系管理对象
# pub_obj.books.all() ——》 出版社出版所有的书籍对象
#
# 基于字段查询
#
# models.Book.objects.filter(publisher__name=\'人民出版社\')
#
# 不指定related_name
# models.Publisher.objects.filter(book__name=\'跟金老板学开车\')
# 指定related_name =’books‘
# models.Publisher.objects.filter(books__name=\'跟金老板学开车\')
# 指定related_query_name =’book‘
# models.Publisher.objects.filter(book__name=\'跟金老板学开车\')
表示多对多的关系:
# 基于对象的查询
# author_obj.books ——》 关系管理对象
# author_obj.books.all() ——》 关系管理对象
#
# 不指定related_name
# book_obj.author_set ——》 关系管理对象
# book_obj.author_set.all() ——》 作者写过所有的书籍对象
#
# 指定related_name=\'authors\'
# book_obj.authors——》 关系管理对象
# book_obj.authors.all() ——》 作者写过所有的书籍对象
#
# 管理对象的方法
#
# all 获取所有的对象
# set 设置关系 多对多 [ id,id ] [对象,对象] 一对多 [对象]
# add 添加关系 多对多 id,id 对象,对象 一对多 对象
# remove 删除关系 一对多:必须设置外键可为空,才有remove clear方法
# clear 清空所有的关系
# create 创建一个对象并且添加关系