2011-10-02 44 views
0

我有兩個型號Django的檢查哪些用戶批准文件

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") 

我想列出與當前登錄用戶的審批狀態的所有文件,當用戶同意/棄權/不批准文件我在審批表記錄否則在「審批表」中沒有關於當前用戶審批狀態的記錄

請幫我看看和模板。

回答

1

上查看:

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 ]) 

,不要忘了包括選擇render_to_response上userApprovals:

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 %} 

注:變化相關的名稱爲「approval_user 」。

+0

Approval審批表中每個文件都沒有審批記錄審批表只有在用戶提交審批狀態時纔會更新......否則審批狀態爲'您的審批' – user975472

+0

好的,我已經改寫答案。 – danihp

0

目前還不清楚您的要求是否允許任何用戶批​​準文檔,但我推斷這是基於您的模型的情況。如果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> 
相關問題