• 表于表的查询


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

    #书和出版社是多对一的关系。
    #
    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")
  • 相关阅读:
    记录一段QQ关于 UNIGUI 的Session 时间设定
    uniGUI Cannot read property 'remove' of null
    基于kbmMW Configuration Framework 实现配置文件对象化
    每日日报42
    每日日报41
    每日日报40
    解决Ajax无法跳转到其他界面
    每日日报39
    每日日报38
    《软件项目成功之道》阅读笔记01
  • 原文地址:https://www.cnblogs.com/seanliang/p/9209645.html
Copyright © 2020-2023  润新知