我有过滤对象的麻烦。对象显示在所有的列表中,但我已经为特定的列表设置了外键。有什么解决办法吗?
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 %}
而不是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
-类。