django 外键操作

Posted 小作一个

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于django 外键操作的主要内容,如果未能解决你的问题,请参考以下文章

django ORM的外键操作

django 外键操作

django中的数据库外键操作

Django学习手册 - ORM 外键

Django基础五之django模型层多表操作

django模型外键AttributeError