BaseModel:
class BaseModel(Document):
is_delete = BooleanField(default=False) # 软删除
is_block = BooleanField(default=False) # 禁用
create_time = DateTimeField(default=datetime.now) # 创建时间
update_time = DateTimeField() # 更新时间
meta = {
'allow_inheritance': True,
'abstract': True,
'queryset_class': CustomerQuerySet,
}
``
用了is_delete逻辑判断数据是否已经被删除,如果在每次Model.objects查询时加上is_delete=False比较麻烦,而且容易忽略掉;因此可以重写queryset对象的查询方法
底层BaseQuerySet的__call__方法会返回所查询的queryset对象,所以我们可以自定义CustomerQuerySet并集成mongonengine的QuerySet类,重写call方法,把需要的条件参数加到kwargs里面,进而实现自定义的筛选功能
class CustomerQuerySet(QuerySet):
def __call__(self, *args, **kwargs):
# 过滤掉已经逻辑删除的数据
kwargs['is_delete'] = False
return super().__call__(*args, **kwargs)
写好该方法后,需要在BaseModel的meta里面重新定义queryset_class,使用自定义的QuerySet类
meta = {
'allow_inheritance': True,
'abstract': True,
'queryset_class': CustomerQuerySet,
}