Django通过外键过滤对象

问题描述 投票:0回答:1

我有过滤对象的麻烦。对象显示在所有的列表中,但我已经为特定的列表设置了外键。有什么解决办法吗?

models.py

class Lists(models.Model):
    title = models.CharField(max_length=200)  

class ListsItem(models.Model):
    date = models.DateTimeField(default=datetime.now,blank=True)
    title = models.CharField(max_length=200)   
    main_list=models.ForeignKey(Lists, on_delete=models.SET_NULL, null=True)

views.py

lists = Lists.objects.order_by('date')
listitems = ListsItem.objects.filter(main_list__in=lists).order_by('date')

模板

{% if lists %}
{% for list in lists %}

{{list.title}}


{% if listitems %}
{% for listitem in listitems %}

{{listitem.title_item}}


{% endfor %}   
{% endif %}


{% endfor %}  
{% endif %}
python django view
1个回答
2
投票

而不是2个独立的列表,你可以获取你的对象在模板内为每个 Lists-对象。

{% for list in lists %}
...
{% for item in list.listsitem_set.all %}

... do something with related items

{% endfor %}
...

此外,为了改进查询,你可以用 prefetch_related,喜欢。

lists = Lists.objects.order_by('date').prefetch_related('listsitem_set')

如果你不想单独设置... order_by,只需添加 ordering 到模型 Meta-类。

© www.soinside.com 2019 - 2024. All rights reserved.