Джанго проверить, какие пользователи одобрили документ - PullRequest
0 голосов
/ 02 октября 2011

У меня две модели

class Document(models.Model):
    name = models.CharField(max_length=250, blank=True)

class Approval(models.Model):
    document = models.ForeignKey(Document)
    user = models.ForeignKey(User, related_name='approval user')
    status = models.IntegerField(choices=APPROVELS, default=1, help_text="Approved")

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

Пожалуйста, помогите мне с представлением и шаблоном.

Ответы [ 2 ]

1 голос
/ 02 октября 2011

При просмотре:

userApprovals = Approval.objects.filter( user = request.user )
or
userApprovals = request.user.approval_user_set.all()
forYourApproval = Document.objects.exclude( pk__in = [ a.document.pk for a in userApprovals ] )

и не забудьте включить userApprovals в render_to_response:

return render_to_response(
                  "yourPage.html", 
                  {
                   "userApprovals": userApprovals,
                   "forYourApproval": forYourApproval,
                   },
                  context_instance=RequestContext(request))

В шаблоне:

{% for approval in userApprovals %}
   {{ approval.document.name }} status {{ approval.get_status_display }}
{% endfor %}

{% for document in forYourApproval %}
   {{ document.name }} waiting for your approval.
{% endfor %}

Примечание: изменитьимя, связанное с «application_user».

0 голосов
/ 02 октября 2011

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