[英]How to list objects that have the same ForeignKey attribute?
I want to list all approval steps that have the same approval_id
on one page.我想在一页上列出所有具有相同approval_id
的批准步骤。 I can list every ApprovalSteps
in my views but that is not what I want.我可以在我的视图中列出每个ApprovalSteps
,但这不是我想要的。 For example, I have an approval object with ApprovalProcess
id is 1. I want to list all approval steps with approval_id
= 1 in my template.例如,我有一个审批 object,其中ApprovalProcess
id 为 1。我想在我的模板中列出所有审批步骤,其中approval_id
= 1。 How can I do that?我怎样才能做到这一点?
models.py模型.py
class ApprovalProcess(models.Model):
id = models.AutoField(primary_key=True)
user_id = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, related_name='starter')
doc_id = models.ForeignKey(Pdf, on_delete=models.CASCADE, null=True)
...
class ApprovalSteps(models.Model):
approval_id = models.ForeignKey(ApprovalProcess, on_delete=models.CASCADE, null=True)
starter = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, related_name='step_starter')
...
views.py视图.py
def approval_details(request, pk):
approval_item = get_object_or_404(ApprovalSteps, id=pk)
return render(request, 'approval_details.html', {'approval_item': approval_item})
You can change your approval_details
view function to您可以将您的approval_details
视图function 更改为
def approval_details(request, pk):
approval_items_list = get_list_or_404(ApprovalSteps, approval_id=pk)
return render(request, 'approval_details.html', {'approval_items_list': approval_items_list})
To access the related objects ApprovalProcess
to ApprovalSteps
, you can use _set
( Django Docs ).要访问ApprovalProcess
到ApprovalSteps
的相关对象,您可以使用_set
( Django Docs )。
So in your case in you template approval_item.approval_id_set.all
:因此,在您的情况下,您的模板approval_item.approval_id_set.all
:
{% for item in approval_item.approval_id_set.all %}
{{ item.doc_id }}
{% endfor %}
in views.py:在views.py中:
approval_item.approval_id_set.all()
Or use ForeignKey.related_name :或使用ForeignKey.related_name :
approval_id = models.ForeignKey(
ApprovalProcess, on_delete=models.CASCADE, null=True,
related_name="processes"
)
# then you can use
approval_item.processes.all()
Also I recommend you to rename approval_id to approval because:另外,我建议您将approval_id重命名为approval ,因为:
Behind the scenes, Django appends "_id" to the field name to create its database column name, see Django ForeignKey在幕后,Django 将“_id”附加到字段名称以创建其数据库列名称,请参阅Django ForeignKey
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.