Неясно, позволяют ли ваши требования любому пользователю утверждать документ, но я предполагаю, что это основано на ваших моделях. Если Document
может быть одобрен только конкретным пользователем или набором пользователей, или если документ утвержден несколькими пользователями, вам необходимо будет внести некоторые существенные изменения в дизайн модели.
Если нет, я бы написал следующее:
from django.db.models import Q
def approval_view(request):
documents = Document.objects.filter(
Q(approval__id__isnull=True) | Q(approval__user=request.user))
return render_to_response(template_name, {'documents': documents})
Это вернет контекст с документами, которые не имеют записи об утверждении в таблице утверждений ИЛИ, которые были утверждены request.user
.
Вам, вероятно, понадобится дополнительный код для отображения соответствующей информации для каждого документа в documents
. Например, может потребоваться специальный шаблонный фильтр, отображающий состояние документа ("For your Approval"
или "Approved"
или что-либо еще). Пример фрагмента шаблона:
{% for document in documents %}
<li>{{ document.name }} - {{ document|approval_status }}</li>
{% endfor %}
Как я сказал в начале, ваши требования не ясны. Каждому ли пользователю будет предоставлена возможность утвердить документ? Или все документы получают единственную возможность быть одобренной любым пользователем? Существует большая разница, и этот код отражает последнее предположение.
Если каждому пользователю должна быть предоставлена возможность утвердить документ, и вам необходимо отобразить решение об утверждении текущего пользователя, то приведенный выше код будет работать с небольшими изменениями. Вероятно, я бы изменил представление, чтобы отображать все документы в некотором порядке:
documents = Document.objects.all()
А затем используйте пользовательский шаблонный фильтр, как указано выше, для отображения статуса подтверждения для текущего пользователя (передавая пользователя в качестве аргумента):
<li>{{ document.name }} - {{ document|approval_status:request.user }}</li>