我在django中有一个模型,它有一个布尔私有/公共属性:
class TestModel(models.Model):
name = models.CharField()
is_public = models.BooleanField(default=False)
我希望每次我在应用程序中查询此模型时,它只向普通用户返回公共实例,并向超级用户返回所有可用实例。
我需要如何以及在何处实施此类功能?
答案 0 :(得分:4)
您可以在视图层实现该逻辑,可能使用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()