django - Django 在排序的查询集中注释 x 的第一次出现
问题描述
我有一个查询集,首先显示所有者的对象,然后是不属于他们的对象。
MyModel.objects.annotate(
sort=Case(
When(owner=self.request.user, then=0),
default=1, output_field=IntegerField()
)
).order_by('sort', 'name')
现在,如果这产生了以下内容,我该如何注释所有者不是请求用户的第一次出现obj_list[2]['first_occurrence'] = True
呢?
obj_list = [
{'owner': 1, 'name': 'B', 'sort': 0},
{'owner': 1, 'name': 'D', 'sort': 0},
{'owner': 6, 'name': 'A', 'sort': 1},
...
]
或者,有没有办法让第一次出现(无需重新组合),request.user != obj.owner
以便我可以插入一个额外的表格行?
{% for obj in obj_list %}
{% if obj.first_occurrence %}
...
{% endif %}
...
{% endfor %}
解决方案
您不能在查询本身中执行此操作,注释每行都有效,因此不可能根据查询的其余部分中的出现来注释行。
但这通常是我在视图中而不是在模板中做的事情。一旦你有obj_list
,得到第一次出现:
first_occurence = next(obj for obj in obj_list if obj['sort'] == 1)
并将其作为附加变量传递给模板,以便您可以测试 if obj == first_occurence
。
推荐阅读
- regex - 我想为不包含数字的行对文件进行排序
- r - 使用 fct_infreq() 更改图上因子的顺序
- c++ - 波斯语中的 QString
- android - C ++中的Android OpenGL多线程
- linux - 如何使用 GCC/LD 设置 RPATH 和 RUNPATH?
- php - Groovy Base64 解码与 PHP base64_decode
- ios - 从 alamofire 上传多个文件时如何获取文件上传完成计数?
- javascript - 创建集合结构的嵌套数组
- asp.net - 实体框架覆盖服务层上的 SaveChanges() 而不是数据层(不同的项目)
- compiler-errors - 错误:未定义环境变量“STAGING_DIR”