jua*_*ren 24 python django metaprogramming django-models
我在模型中添加了"已取消"字段,有没有办法将模型默认查询修改为cancelled = False?无需修改我的所有过滤/排除查询?
Mar*_*vin 37
您可以使用自定义模型管理器执行此操作,并覆盖该get_queryset函数以始终过滤cancelled = False.
class CustomManager(models.Manager):
def get_queryset(self):
return super(CustomManager, self).get_queryset().filter(canceled=False)
class MyModel(models.Model):
# Blah blah
objects = CustomManager()
Run Code Online (Sandbox Code Playgroud)
然后在调用MyModel.objects.all()它时将始终排除已取消的对象.这是一篇我发现有用的博客文章.http://www.b-list.org/weblog/2006/aug/18/django-tips-using-properties-models-and-managers/
编辑:使用自定义管理器的更好方法可能是将其附加到除对象之外的其他属性,例如:
class MyModel(models.Model):
# Blah blah
active = CustomManager()
Run Code Online (Sandbox Code Playgroud)
在您的视图中,您的查询看起来就像MyModel.active.all().
EDIT2:更新方法从拼写get_query_set到get_querysetDjango的现代版本.