首页 > 其他 > 详细

django一对多,多对多操作

时间:2019-04-10 17:48:22      阅读:127      评论:0      收藏:0      [点我收藏+]
先在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     创建一个对象并且添加关系

 

 

django一对多,多对多操作

原文:https://www.cnblogs.com/NoteBook3013/p/10684853.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!