Python学习第135天(Django的ORM多对多查询)
2021-04-13 18:27
标签:表操作 auth add 作者 开始 系统 val span creat 今天总结一下,感觉近期的知识点比较多,但是很多测试是为了测试而测试,不具备实际的使用价值,所以打算开始加快学习进度,粗略听,简单总结,在案例实践的时候进行重点了解,今天主要看的是ORM的多对多查询。 大致有两种方式,一种是使用系统提供的多对多表格,另一种属于自己设定一个表格。自定表格增加比较方便,但查询逻辑不佳,而系统表格查询方便,但是增加内容比较麻烦。 多表操作(多对多): 创建多对多的关系 author= models.ManyToManyField("Author")(推荐) # class Book_Author(models.Model): 实际操作:models views:(都暂时写在add下面,完全没有教使用方式,只是单纯输出,暂时比较无脑) 以上内容就是今天的全部内容。 Python学习第135天(Django的ORM多对多查询) 标签:表操作 auth add 作者 开始 系统 val span creat 原文地址:https://www.cnblogs.com/xiaoyaotx/p/13340826.html
书籍对象它的所有关联作者 obj=book_obj.authors.all()
绑定多对多的关系 obj.add(*QuerySet)
obj.remove(author_obj)
如果想向第三张表插入值的方式绑定关系: 手动创建第三张表
# book=models.ForeignKey("Book")
# author=models.ForeignKey("Author")
Book_Author.objects.create(book_id=2,author_id=3)class Book(models.Model):
name=models.CharField(max_length=20)
price=models.IntegerField()
pub_date=models.DateField()
publish=models.ForeignKey("Publish")
authors=models.ManyToManyField("Author")
def __str__(self):
return self.name
class Publish(models.Model):
name=models.CharField(max_length=32)
city=models.CharField(max_length=32)
def __str__(self):
return self.name
# class Book_Author(models.Model):
# book=models.ForeignKey("Book")
# author=models.ForeignKey("Author")
class Author(models.Model):
name=models.CharField(max_length=32)
age=models.IntegerField(default=20)
def __str__(self):
return self.name
#通过对象的方式绑定关系
# book_obj=Book.objects.get(id=3)
# print(book_obj.authors.all())
# print(type(book_obj.authors.all()))
#
# author_obj=Author.objects.get(id=2)
# print(author_obj.book_set.all())
# book_obj=Book.objects.get(id=3)
# author_objs=Author.objects.all()
# #book_obj.authors.add(*author_objs)
# # book_obj.authors.remove(*author_objs)
# book_obj.authors.remove(4)
#创建第三张表
# Book_Author.objects.create(book_id=2,author_id=2)
#
# obj=Book.objects.get(id=2)
# print(obj.book_author_set.all()[0].author)
#alex出过的书籍名称及价格
# ret=Book.objects.filter(book_author__author__name="alex").values("name","price")
# print(ret)
# ret2=Book.objects.filter(authors__name="alex").values("name","price","authors__name")
# print(ret2)
# ret=Book.objects.all().aggregate(Avg("price"))
# ret=Book.objects.all().aggregate(Sum("price"))
# ret=Book.objects.filter(authors__name="alex").aggregate(alex_money=Sum("price"))
# ret=Book.objects.filter(authors__name="alex").aggregate(Count("price"))
# print(ret)
下一篇:阻塞线程的方法
文章标题:Python学习第135天(Django的ORM多对多查询)
文章链接:http://soscw.com/index.php/essay/75304.html