您在視圖層實現該邏輯,可能帶有custom manager。
你的經理會是這個樣子:
class PublicTestModelManager(models.Manager):
def get_query_set(self):
return super(PublicTestModelManager, self).get_query_set().filter(is_public = True)
您的模型看起來是這樣的:
class TestModel(models.Model):
name = models.CharField()
is_public = models.BooleanField(default=False)
objects = models.Manager() # The default manager.
public_objects = PublicTestModelManager()
然後,您可以編寫一個選擇了正確的管理器功能:
def test_objects_for_user(user):
if user.is_superuser:
return TestModel.objects
else:
return TestModel.public_objects
然後在您看來,您可以使用:
test_objects_for_user(request.user).all()
+1。自定義管理器聽起來像是正確的路要走。 – 2010-09-08 14:16:20
但我仍然需要在每個視圖中編寫if/else子句,對不對? – dragoon 2010-09-08 14:17:15
@dragoon - 答案已更新。 – 2010-09-08 14:22:25