Django自定义管理器(objects)后遇到的问题
# 管理器自定义简介
django model 的管理器 objects 允许我们自定义,这大大的扩展了model的可用性。
例如,使用这个特性来软删除。设置一个状态字段,在自定义的objects 中重写 get_queryset 来过滤状态。这样以后我们使用objects来查询model 的数据时,便会自动过滤状态。
from django.db import models
class aManager(models.Manager):
def get_queryset(self):
return super(aManager, self).get_queryset().filter(isactive=True)
class A(models.Model):
name = models.CharField(max_length=100)
isactive = models.BooleanField()
objects = aManager()
def __unicode__(self):
return '%s' % self.name
class B(models.Model):
name = models.CharField(max_length=100)
a = models.ForeignKey(A)
def __unicode__(self):
return '%s' % self.name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
其他 管理器的使用可见 官方文档。
# 问题
今天遇到一个问题,如上的模型实例,数据如下:
通过 A 的关联条件查询 B 时,并没有过滤掉 A中状态。
如下:
可以从 sql 看出,并没有对A 的状态进行过滤。
所以,此处注意。
# 结论
以后级联建议尽量使用唯一索引来过滤。
上次更新: 2023/03/28, 16:27:19