django - Django 分组和过滤、排序
问题描述
我正在为我们的电影网站创建一个小项目
我有模型
class Movies(models.Model):
name = models.CharField(max_length=100)
...
class Projections(models.Model):
movie = models.ForeignKey(Movies, on_delete=models.DELETE)
startshow = models.DateTimeField()
每部电影都有几个具有不同 startshow 的投影。
如何获取按名称分组并按第一个 startshow 排序的电影,以及按 startshow 排序的该电影的所有投影
该列表如下所示:
巨魔:世界巡回演唱会
- 2020-11-10 17:00
- 2020-11-11 17:00
- 2020-11-12 17:00
冷冻
- 2020-11-10 19:00
- 2020-11-11 19:00
- 2020-11-12 19:00
天网
- 2020-11-10 21:00
- 2020-11-11 21:00
- 2020-11-12 21:00
请帮忙
解决方案
您基本上应该只传递 的列表Movies
,然后遍历相关的Projections
:
from django.db.models import Min, Prefetch
def myview(request):
movies = Movie.objects.annotate(
first_start=Min('projections__startshow')
).prefetch_related(
Prefetch(
'projections_set',
Projections.objects.order_by('startshow'),
to_attr='ordered_projections'
)
).order_by('first_start')
return render(request, 'some_template.html', {'movies': movies})
然后在模板中渲染它:
<ul>
{% for movie in movies %}
<li>{{ movie.name }}</li>
<ul>
{% for projection in movie.ordered_projections %}
<li>{{ projection.startshow }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
注意:通常 Django 模型被赋予一个单数名称,所以
Movie
而不是.Movies
推荐阅读
- blazor - Blazor Virtualize 组件在水平滚动时中断
- reactjs - 网格元素在移动版本上超出容器
- django - 如何在 django rest 框架中获取模型中的记录数?
- firebase - Firebase / Firestore 模拟器无法通过本地网络访问
- sql - @ 字符前的字符串通配符
- javascript - Angular 从模块 JSON 生成纯 HTML
- python - Pandas ImportError:无法导入名称“FrameOrSeriesUnion”
- database - 如何重试 Elasticsearch 分片分配,未分配分片
- android - 滚动查看可点击
- linux - 如何在 linux 上安装 i386 gcc 交叉编译器