美文网首页测试开发编程资料收集
Django_外键查询和反向查询

Django_外键查询和反向查询

作者: 古佛青灯度流年 | 来源:发表于2018-05-28 10:41 被阅读7次

@property在数据库model中的一些小技巧,同时也会涉及些Django在数据库建模的过程中,外键查询和反向查询方面的内容。
不多说,看例子

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=64)
    age = models.IntegerField()
    tel = models.CharField(max_length=64)

    @property
    def all_cars(self):
        return cars.all()

    @property
    def info(self):
        # return the name and tel of person
        return '%s %s' % (self.name, self.tel)

class Car(models.Model):
    owner = models.Foreignkey(Person, related_name='cars')
    name = models.CharField(max_length=64)
    price = models.FloatField()

在上面的两个表中,Person表是主表,Car是字表,Car表外键至Person表。
子表查询主表:

car = Car.objects.get(id=1)
# 查询该车的车主
owner = car.owner

主表查询子表,即反向查询:

Tom = Person.objects.get(id=1)
# 查询此人有多少车
# 方式一:
# Django默认每个主表对象都有一个外键的属性
# 可以通过它来查询所有属于主表的子表信息
# 查询方式:主表.子表_set()
# 返回值为一个queryset对象
Tom.Car_set().all()
# 方式二:
# 通过在外键中设置related_name属性值既可
Tom.cars.all()
# 方式三:
# 通过@property装饰器在model中预定义方法实现
Tom.all_cars

查询一些自己需要的组合数据,比如获取某人的关键信息

Tom.info

另外,在新的需求突然提出的时候,在不改动原有查询代码的情况下,在表模型中添加此装饰器装饰过的方法既可。

相关文章

  • Django_外键查询和反向查询

    @property在数据库model中的一些小技巧,同时也会涉及些Django在数据库建模的过程中,外键查询和反向...

  • orm查询操作

    单表查询操作 外键的跨表查询 正向查询(在有外键字段的表向没有的表查询) 反向查询(没有外键的字段向有外键字段的表...

  • python 执行命令统计

    运行程序: 1. modal转模型 有外键的放后面,没有的放前面,好判断。 关于modal反向查询,每个外键,添加...

  • 外键查询

    A和B是2个类,B下有个公有属性为A的外键,如何查询与A相关的所有B对象。 方法:先实例化一个A的对象a,然后b=...

  • sqlalchemy外键关联

    创建外键 关联查询 执行结果:

  • 2021-11-02 RD4 review SQL

    安装 服务mysql 可视化软件 navicat 关系模型 主键 外键 索引 查询数据 基本查询 条件查询 投影查...

  • 外键、联合查询、子查询

    1、外键: 增加外键 创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段) refer...

  • 连接查询;外键

    连接查询 连接查询(join)分类:内连接、外连接、自然连接、交叉连接 使用方式:左表 join 右表 交叉连接(...

  • 连接查询;外键

    连接查询 连接查询(join)分类:内连接、外连接、自然连接、交叉连接 使用方式:左表 join 右表 交叉连接(...

  • 外键补充 联结查询 子查询 组合查询

    外键补充 1.建立外键的表必须是InnoDB型,不能是临时表 2.定义外键名时,不能加引号 外键约束 当主键中的数...

网友评论

    本文标题:Django_外键查询和反向查询

    本文链接:https://www.haomeiwen.com/subject/rdbwjftx.html