【发布时间】:2012-07-21 23:56:44
【问题描述】:
我很好奇是否有最佳实践或推荐的方法来实现这一点?
假设我有一个这样的模型:
class Cat(models.Model):
field1=models.CharField(...)
field2=models.CharField(...)
evil=models.BooleanField(...)
我想要完成的是,我不希望任何视图能够访问邪恶为 True 的 Cat 记录。
我真的需要在每个 Cat.objects.filter 调用中添加 .filter(evil=False),还是有什么方法可以在课堂上做一次,让邪恶的猫永远不会出现在任何地方?
【问题讨论】:
-
我认为自定义管理器是最好的选择:docs.djangoproject.com/en/dev/topics/db/managers/…
-
我同意@Jingo。让它成为一个答案,你就有我的投票权。
-
谢谢Jingo。这看起来很有希望。如果成功了,我会在这里写下我自己的答案。如果其他人有不同的想法,我仍然会很好奇,但我会试一试。
-
@Greg:使用自定义管理器时,请记住第一个管理器成为“默认”,因此应该不过滤,因此您应该定义
objects = models.Manager(),然后定义seenoevil = NoEvilCatsManager()跨度> -
@Jingo,他们太邪恶了,甚至不应该出现在管理员中 :-) 但是这点很好。
标签: django django-models django-orm