Вы реализуете эту логику на уровне представления, возможно, с помощью пользовательского менеджера .
Ваш менеджер будет выглядеть примерно так:
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()