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


	Python学习第135天(Django的ORM多对多查询)
[编程语言教程]

今天总结一下,感觉近期的知识点比较多,但是很多测试是为了测试而测试,不具备实际的使用价值,所以打算开始加快学习进度,粗略听,简单总结,在案例实践的时候进行重点了解,今天主要看的是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
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Python学习第135天(Django的ORM多对多查询)