Python Django,通过多条目_set.all()关系筛选查询集
我的模板中有一些非常糟糕的逻辑,可以在服务器详细信息页面中显示与给定服务器对象相关的任何行项Python Django,通过多条目_set.all()关系筛选查询集,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,我的模板中有一些非常糟糕的逻辑,可以在服务器详细信息页面中显示与给定服务器对象相关的任何行项 class Server(models.Model): client = models.ForeignKey(Client, on_delete=models.CASCADE) ... class Schedule(models.Model): client = models.ForeignKey(Client, on_delete=models.CASCADE) ..
class Server(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE)
...
class Schedule(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE)
...
class LineItem(models.Model):
schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE)
server = models.ForeignKey(Server, blank=True, null=True)
...
更新:澄清
我可以通过以下方式从inside by view获得相关信息:
{% for schedule in server.client.schedule_set.all %}
{% for lineitem in schedule.lineitem_set.all %}
{% if lineitem.server == server %}
{{ lineitem.id }}
{{ lineitem.description }}
{% endif %}
{% endfor %}
{% endfor %}
然后在模板中:
def serverDetailView(request, pk):
# Fetches all the line items related to the current server
server = get_object_or_404(Server, pk=pk)
line_items = []
for schedule in server.client.schedule_set.all():
items = schedule.lineitem_set.all()
for item in items:
if item.server == server:
line_items.append(item)
context = {'server': server, 'line_items': line_items}
return render(request, 'reports/server_detail.html', context)
问题是,我能用一个查询过滤掉这些相关的行项目吗?而不是遵循相反的关系
model\u set
managers。通过使用Django ORM中的双下划线表示法,可以遵循ForeignKey
关系
{% for item in line_items %}
{{ item }}
{% endfor %}
我从来没有想过要这样做!我明天才下班,我99%的病都好了,这就是我想要的。谢谢
line_items = LineItem.objects.filter(schedule__client=server.client)