浅谈Django中的filter用法与反向查询

本文探讨了Django中的反向查询技术,详细解释了如何从没有外键的表出发,关联查询含有该表外键的表。通过示例展示了如何创建Person实例,然后使用filter进行反向查询,获取Pen实例,并通过Person创建新的Pen实例。反向查询的关键在于使用关联类名+_set,如pen_set,并可以结合filter进行进一步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅谈Django中的filter用法与反向查询


Django中,filter()对象返回的是一个查询集QuerySet,可用于执行切片和遍历,可用于执行反向查询,与all()相似,只是all()查询全部对象,另一种查询函数是get(),get()只能获取唯一存在的对象,不存在对象或者是多个对象的情况下都会报错。
下面介绍反向查询的简单应用,先看一段代码:



class Person(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField(default=0)

class Pen(models.Model):
    num = models.IntegerField(default=0)
    color = models.CharField(max_length=10)
    pen = models.ForeignKey(Penson,on_delete=models.CASCADE)

在这段代码中,Pen中有一个外键字段,关联Person,Pen作为Penson的外键存在,正向查询就是有外键字段的表去查询关联的表,即Pen关联查询Person;
下面重点介绍反向查询:
反向查询是没有外键字段的表去关联查询有该表外键关联的表,即Person表关联查询Pen表;
反向查询的具体代码操作:

创建Person实例:
per = Person(name = ‘小明’, age = 20)

使用filter查询:
#此时返回的是一个查询集QuerySet, 也可使用get()查询
Person.objects.filter(id=1)

进行反向查询并创建Pen实例:
#创建Person实例
p = Person.objects.get(pk = 1)

#进行反向查询,此时pen_set为小写(首字母或者中间都要小写)
p.pen_set.all()

#通过Person创建pen实例
a=p.pen_set.create(num = 3,color = ‘红色’)

我们可以看到,进行反向查询时,在代码后面加上关联类名+_set,且类名小写,也可用filter查询单个的数据,即执行类似get()的功能,只是此时返回的是一个查询集。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值