Python Django按外键筛选对象

Python Django按外键筛选对象,python,django,view,Python,Django,View,我在过滤对象方面有问题。对象显示在所有列表中,但我已为特定列表设置了外键。有什么解决办法吗 型号.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.CharFiel

我在过滤对象方面有问题。对象显示在所有列表中,但我已为特定列表设置了外键。有什么解决办法吗

型号.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)
lists = Lists.objects.order_by('date')
listitems = ListsItem.objects.filter(main_list__in=lists).order_by('date')
视图.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)
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 %}

您可以在模板中为每个
列表
-对象获取对象,而不是两个单独的列表:

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

... do something with related items

{% endfor %}
...
此外,为了改进查询,您可以使用
预回迁相关的
,例如:

lists=lists.objects.order_by('date')。prefetch_相关('listsitem_set'))

如果您不想单独设置
order\u by
,只需将
ordering
添加到models
Meta
-类中。

而不是两个单独的列表,您可以在模板内为每个
列表获取对象

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

... do something with related items

{% endfor %}
...
此外,为了改进查询,您可以使用
预回迁相关的
,例如:

lists=lists.objects.order_by('date')。prefetch_相关('listsitem_set'))
如果您不想单独设置
order\u by
,只需将
ordering
添加到models
Meta
-类中即可