Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django设计问题_Django_Django Queryset - Fatal编程技术网

Django设计问题

Django设计问题,django,django-queryset,Django,Django Queryset,我在django中有一个具有布尔私有/公共属性的模型: class TestModel(models.Model): name = models.CharField() is_public = models.BooleanField(default=False) 我希望每次在应用程序中查询此模型时,它只向普通用户返回公共实例,向超级用户返回所有可用实例 我需要如何以及在何处实现这些功能?您可以在视图层实现该逻辑,可能需要一个 您的经理看起来像这样: class PublicTe

我在django中有一个具有布尔私有/公共属性的模型:

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子句,对吗?谢谢,对我来说似乎非常复杂,我认为可能有更简单的解决方案)