• Django之model基础(查询补充)


        学习完简单的单表查询外,是远远不够的,今天我们对查询表记录做一个补充,接下来来看看基于对象的跨表查询、基于双下划线的跨表查询,聚合查询和分组查询,F查询与Q查询。

    比如我们有如下一张表,在model中,模型建立如下:

    class Author(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
        age=models.IntegerField()
     
        # 与AuthorDetail建立一对一的关系
        authorDetail=models.OneToOneField(to="AuthorDetail")
     
    class AuthorDetail(models.Model):
     
        nid = models.AutoField(primary_key=True)
        birthday=models.DateField()
        telephone=models.BigIntegerField()
        addr=models.CharField( max_length=64)
        
    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
        city=models.CharField( max_length=32)
        email=models.EmailField()
     
     
    class Book(models.Model):
     
        nid = models.AutoField(primary_key=True)
        title = models.CharField( max_length=32)
        publishDate=models.DateField()
        price=models.DecimalField(max_digits=5,decimal_places=2)
        keepNum=models.IntegerField()<br>    commentNum=models.IntegerField()
     
        # 与Publish建立一对多的关系,外键字段建立在多的一方
        publish=models.ForeignKey(to="Publish",to_field="nid")
     
        # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
        authors=models.ManyToManyField(to='Author')

    基于对象的跨表查询

    1.一对多

    正向查询(按字段:publish)

    (通过书查询出版社)
    #查询nid=1的书籍的出版社所在的城市 如果按字段publish来查询,先找到出版社对象,即 model.Book.object.filter(nid=1).publish 过滤出所有nid=1的书籍所在的出版社对象,拿到的是一个Queryset集合对象 最终的查询语句为 book_obj=Book.objects.filter(nid=1) print(book_obj.publish.city) # book_obj.publish 是nid=1的书籍对象关联的出版社对象 

    反向查询(按表名:book_set)

    (通过出版社查询书)
    查询人民出版社社出版过的书的名字
    
    publish_obj=models.publish.object.filter(name='人民出版社') #查询出人民出版社
    book_list=publish_obj.book_set.all()  对出版社对象与书籍对象进行关联,拿到与该出版社社相关的所有书籍对象
    for book_obj in book_list:
       print(book_obj.title)

    2.一对一

    author和authordetail为一对一的关系

    正向查询(按字段:authorDetail)

    # 查询egon作者的手机号(通过author====>authordetail)
    autho_egon=models.author.object.filter(name='egon')
    autho_egon.authordetail.tel
    

    反向查询(按表名:author)

    # 查询所有住址在北京的作者的姓名
    authorDetail_list=models.authordetail.object.filter(addr='北京')
    for obj in authorDetail_list:
    print(obj.author.name

    3.多对多

    正向查找(按字段:)

  • 相关阅读:
    《Java从入门到放弃》入门篇:springMVC数据传递
    gets()、puts()函数。字符串函数。字符串排序的例子。
    请求上下文与应用上下文(12)
    flask之重定向(10)
    使用jsonify返回json数据(9)
    flask之返回的响应数据(8)
    flask之abort函数与自定义异常处理(7)
    flask获取请求参数(6)
    flask路由(5)
    flask创建app对象(4)
  • 原文地址:https://www.cnblogs.com/moning/p/7762988.html
Copyright © 2020-2023  润新知