zoukankan      html  css  js  c++  java
  • 表于表的查询

    一对多的表结构 外键是在多的那张表里面建的。如下图

    #书和出版社是多对一的关系。
    #
    class Book(models.Model):
        title = models.CharField(max_length=32)
        publish_date = models.DateField(auto_now_add=True)
        price = models.DecimalField(max_digits=5, decimal_places=2)
        # 创建外键,关联publish
        publisher = models.ForeignKey(to="Publisher") #出版社
    class Publisher(models.Model):
        name = models.CharField(max_length=32)
        city = models.CharField(max_length=32)

    数据如下

    1 正向查询(有外键的类)

     使用values('你类中外键的那个字段,然后__外键的那个的字段') 就可以查询了。如下图

    ForeignKey操作

    正向查找

    对象查找(跨表)

    如下的方法

    get()

    first()

    last()

    语法:

    对象.关联字段.字段

     

    示例:

    book_obj = models.Book.objects.first()  # 第一本书对象
    print(book_obj.publisher)  # 得到这本书关联的出版社对象
    print(book_obj.publisher.name)  # 得到出版社对象的名称

     

    字段查找(跨表)

    all()

    filter()

    exclude()

    order_by()

    reverse()

    distinct()

    语法:

    关联字段__字段

    示例:

    print(models.Book.objects.values_list("publisher__name"))

    反向操作

    对象查找

    get()

    first()

    last()

    语法:

    obj.表名_set

    示例:

    publisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象
    books = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有书
    titles = books.values_list("title")  # 找到第一个出版社出版的所有书的书名

    字段查找

    all()

    filter()

    exclude()

    order_by()

    reverse()

    distinct()

    语法:

    表名__字段

    示例:

    titles = models.Publisher.objects.values_list("book__title")
  • 相关阅读:
    oracle中文显示为问号
    oracle 11g 安装报错(agent_nmhs)
    yum源配置
    ora-00020
    mysql停止正在执行的SQL语句
    linux root用户被锁定
    MySQL8.0 根据ibd文件恢复表结构
    mysql 8.x 开启远程访问和修改root密码、
    个人博客迁移到github
    postman断言方式
  • 原文地址:https://www.cnblogs.com/seanliang/p/9209645.html
Copyright © 2011-2022 走看看