Python中关于class.objects.filter()的使用方法
使用 redisco 时发现 objects 这个类是从哪继承来的?求解惑
from redisco import models
class Person(models.Model):
name = models.Attribute(required=True)
created_at = models.DateTimeField(auto_now_add=True)
fave_colors = models.ListField(str)
person = Person(name=“nama”)
person.save()
abc = Person.objects.filter(name = “nama”)[0]
print abc.name
Python中关于class.objects.filter()的使用方法
5 回复
在Django里,Model.objects.filter() 是查询数据库最常用的方法。它返回一个QuerySet,包含所有匹配查询条件的对象。
基本语法:
queryset = ModelName.objects.filter(field_name=value)
关键点:
- 返回QuerySet:结果是惰性查询,只有真正需要数据时(如遍历、切片、求值)才会执行SQL
- 链式调用:可以连续使用多个filter()进行AND查询
- 查询条件:支持各种查找类型(exact、iexact、contains、gt、lt等)
常用示例:
# 精确匹配
users = User.objects.filter(username='john')
# 大于/小于
products = Product.objects.filter(price__gt=100) # 价格大于100
# 包含查询
articles = Article.objects.filter(title__contains='Python')
# 多条件AND查询
orders = Order.objects.filter(
status='completed',
created_at__year=2024
)
# 外键查询
posts = Post.objects.filter(author__name='Alice')
# 排除查询
active_users = User.objects.filter(is_active=True).exclude(is_staff=True)
链式过滤:
# 这两个写法等价
queryset = Model.objects.filter(a=1).filter(b=2)
queryset = Model.objects.filter(a=1, b=2)
注意: filter()返回的是QuerySet,要获取单个对象用get(),但get()没找到会抛异常。
总结:filter()就是Django的WHERE子句,用双下划线语法做各种条件查询。
黄字 models.Model
Model.objects 如果不自定义, django 会默认分配你一个 objects = models.Manager()
请仔细看,这是 redisco,只不过它是模仿了 django 的接口而已
根本实现一般是通过一个 metaclass 实现的,那个 metaclass 是加在 models.Model 上被连带继承了


