Django фильтрация объектов по внешнему ключу - PullRequest
0 голосов
/ 30 апреля 2020

У меня проблемы с фильтрацией объектов. Объекты отображаются во всех списках, но я установил внешний ключ для указанного списка c. Есть какие-нибудь решения?

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 %}

1 Ответ

2 голосов
/ 30 апреля 2020

Вместо 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 -класса.

...