У меня есть модель Post с логическим полем is_draft. Если пользователь вошел в систему и является сотрудником, то я хочу отобразить все сообщения; в противном случае, только сообщения, для которых is_draft является ложным.
Моей первой мыслью было использование диспетчера пользовательских моделей и использование request.user следующим образом:
class PostManager(models.Manager):
def get_queryset(self):
if request.user and request.user.is_staff:
return super().get_queryset()
else:
return super().get_queryset().filter(is_draft=False)
, но запрос недоступен в модель.
Я видел, как некоторые люди используют промежуточное ПО для доступа к пользователю в модели. Мне кажется, это самый безопасный способ удовлетворить мою потребность (ie это делается один раз, в пользовательском менеджере; люди, изменяющие views.py, не должны беспокоиться, не рискуя забывать об этом), но это решение кажется спорным.
У меня, конечно, есть возможность добавить некоторые логи c в представление, но я чувствую, что это не DRY (как я много раз запрашиваю в Post), ни безопасно (риск, что кто-то забудет об этом в какой-то момент) .
По вашему мнению, какой самый чистый и безопасный способ удовлетворить эту потребность?
PS: Я нашел аналогичный вопрос , для которого было найдено решение. предлагается для представлений на основе классов, но мои представления основаны на функциях.
Большое спасибо!