Django设计问题
我在django中有一个具有布尔私有/公共属性的模型:Django设计问题,django,django-queryset,Django,Django Queryset,我在django中有一个具有布尔私有/公共属性的模型: class TestModel(models.Model): name = models.CharField() is_public = models.BooleanField(default=False) 我希望每次在应用程序中查询此模型时,它只向普通用户返回公共实例,向超级用户返回所有可用实例 我需要如何以及在何处实现这些功能?您可以在视图层实现该逻辑,可能需要一个 您的经理看起来像这样: class PublicTe
class TestModel(models.Model):
name = models.CharField()
is_public = models.BooleanField(default=False)
我希望每次在应用程序中查询此模型时,它只向普通用户返回公共实例,向超级用户返回所有可用实例
我需要如何以及在何处实现这些功能?您可以在视图层实现该逻辑,可能需要一个 您的经理看起来像这样:
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()
您可以在视图层实现该逻辑,可能需要一个 您的经理看起来像这样:
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()
但是我仍然需要在每个视图中编写if/else子句,对吗?谢谢,对我来说似乎非常复杂,我认为可能有更简单的解决方案)但是我仍然需要在每个视图中编写if/else子句,对吗?谢谢,对我来说似乎非常复杂,我认为可能有更简单的解决方案)