Я хочу получить все объекты, связанные с пользователем, и разделить полученный список на три различных списка в пользовательском интерфейсе в соответствии с некоторой дополнительной логикой. В настоящее время я делаю это, устанавливая @property
для модели, а затем выполняю несколько циклов и if / else в шаблоне. Это, очевидно, неоптимально, поскольку я не хотел бы включать заголовки разделов, если в текущем разделе ничего нет, но, поскольку я добавляю один большой список, нет состояния empty
.
Текущий:
модель
class Entry(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
publish_date = models.DateField(null=True, blank=True)
favorite = models.BooleanField(default=False)
просмотр
entries = Entry.objects.filter(user=request.user)
шаблон
<strong>FAVORITES</strong>
{% for obj in entries %}
{% if obj.group == 'favorites' %}
...
{% endif %}
{% endfor %}
<strong>PUBLISHED</strong>
{% for obj in entries %}
{% if obj.group == 'published' %}
...
{% endif %}
{% endfor %}
<strong>DRAFT</strong>
{% for obj in entries %}
{% if obj.group == 'draft' %}
...
{% endif %}
{% endfor %}
Как добавить метод в модель (например, get_groupings
), который мог бы возвращать dict с тремя отдельными наборами запросов ('entry [' favourites = ')) эффективным способом для базы данных?