Python学习第135天(Django的ORM多对多查询)

2021-04-13 18:27

阅读:685

标签:表操作   auth   add   作者   开始   系统   val   span   creat   

今天总结一下,感觉近期的知识点比较多,但是很多测试是为了测试而测试,不具备实际的使用价值,所以打算开始加快学习进度,粗略听,简单总结,在案例实践的时候进行重点了解,今天主要看的是ORM的多对多查询。

  大致有两种方式,一种是使用系统提供的多对多表格,另一种属于自己设定一个表格。自定表格增加比较方便,但查询逻辑不佳,而系统表格查询方便,但是增加内容比较麻烦。

  多表操作(多对多): 

  创建多对多的关系 author= models.ManyToManyField("Author")(推荐)


  书籍对象它的所有关联作者 obj=book_obj.authors.all()
  绑定多对多的关系 obj.add(*QuerySet)
    obj.remove(author_obj)


  如果想向第三张表插入值的方式绑定关系: 手动创建第三张表

    # class Book_Author(models.Model):
    # book=models.ForeignKey("Book")
    # author=models.ForeignKey("Author")
    Book_Author.objects.create(book_id=2,author_id=3)

实际操作:models

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

views:(都暂时写在add下面,完全没有教使用方式,只是单纯输出,暂时比较无脑)

#通过对象的方式绑定关系


    # 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多对多查询)

标签:表操作   auth   add   作者   开始   系统   val   span   creat   

原文地址:https://www.cnblogs.com/xiaoyaotx/p/13340826.html


评论


亲,登录后才可以留言!