zoukankan      html  css  js  c++  java
  • django 外键操作

    下面定义两个模型,一个主表,一个字表。

    举例说明:

    如何通过主表对象找到对应的子表对象?

    如何通过子表对象找到对应的主表对象?

    class Person(models.Model);
        name = models.CharField('作者姓名', max_length=10)
        age = models.IntegerField('作者年龄')
    
    
    class Book(models.Model):
        person = models.ForeignKey(Person,related_name='person_book')
        title = models.CharField('书籍名称', max_length=10)
        pubtime = models.DateField('出版时间')

    上面的两个问题就对应变成了:

    如何通过Person对象来找到对应的Book对象?

    如何通过Book对象来找到对应的Person对象?

    如何通过Person对象来找到对应的Book对象?

    方法1:

      1. 先找到作者信息: persion = Person.objects.filter(过滤条件),返回以一个persion对象。

      2. 再查询与该person对象关联的书籍对象: book = person.book_set.all()

    说明: django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。这个属性的名称默认是以子表的名称小写加上_set()来表示,默认返回的是一个querydict对象,你可以继续的根据情况来查询等操作。
     

    方法2:

    使用related_name: 关联对象反向引用描述符。

    在定义子表的外键的时候,给这个外键定义好一个名称。用related_name比如:
     
    person = models.ForeignKey(Person, related_name='person_set')
    那么可以根据定义的related_name的值可以 关联主表对象且反向引用 。
    用book = person.person_set.all(), 代替方法1中的 book = person.book_set.all()
     
     
    如何通过Book对象来找到对应的Person对象?
    假如我先得到了一个子表的对象。那我只要获取该对象关联主表的外键,就可以得到主表的信息了。
    比如我得到一个book对象,然后我想得到book对象的主表person的信息的话:
    p = book.person
  • 相关阅读:
    leetcode刷题笔记九十八题 验证二叉搜索树
    leetcode刷题笔记九十七题 交错字符串
    leetcode刷题笔记九十六题 不同的二叉搜索树
    leetcode刷题笔记九十五题 不同的二叉搜索树II
    leetcode刷题笔记九十四题 二叉树的中序遍历
    leetcode刷题笔记九十三题 复原IP地址
    java 语句流程
    java byte/short/char补充(了解)
    Java反射机制demo(四)—获取一个类的父类和实现的接口
    AOP方法拦截获取参数上的注解
  • 原文地址:https://www.cnblogs.com/haoshine/p/5822345.html
Copyright © 2011-2022 走看看