我有两个型号
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")
我希望列出具有当前登录用户批准状态的所有文档,当用户批准/弃权/未批准我在批准表中记录的文档时,否则在批准表中没有关于当前用户批准状态的记录
请帮我查看视图和模板。
答案 0 :(得分: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”。
答案 1 :(得分: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>