Джанго дизайн вопрос - PullRequest
       5

Джанго дизайн вопрос

1 голос
/ 08 сентября 2010

У меня есть модель в django, которая имеет логический атрибут private / public:

class TestModel(models.Model):
    name = models.CharField()
    is_public = models.BooleanField(default=False)

Я хочу, чтобы каждый раз, когда я запрашивал эту модель в приложении, он возвращал только публичные экземпляры обычному пользователю и все доступные экземпляры супер-пользователю.

Как и где мне нужно реализовать такую ​​функциональность?

1 Ответ

4 голосов
/ 08 сентября 2010

Вы реализуете эту логику на уровне представления, возможно, с помощью пользовательского менеджера .

Ваш менеджер будет выглядеть примерно так:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...