如何在 Django ListView 中正确过滤当前用户的照片数据

本文解决 Django ListView 中因错误覆盖 context_object_name 导致上下文为空的问题,详解如何安全地按登录用户过滤照片、保留分页与默认行为,并提供可复用的代码实践与关键注意事项。 本文解决 django listview 中因错误覆盖 `context_object_name` 导致上下文为空的问题,详解如何安全地按登录用户过滤照片、保留分页与默认行为,并提供可复用的代码实践与关键注意事项。在 Django 的 ListView 中,若需让每个登录用户仅查看自己上传的照片,绝不能直接覆写 context'photos' 为新的 QuerySet------这会破坏 ListView 内置的分页逻辑(如 page_obj、is_paginated)、对象计数及默认上下文结构,导致模板中 photos 变为空或分页失效。根本问题在于:你调用了 super().get_context_data(),但随后用 context'photos' = ... 完全替换了由 ListView 自动注入的、已包含分页信息的 QuerySet。正确做法是在 get_queryset() 中完成数据过滤,让 ListView 基于过滤后的 QuerySet 自动构建完整上下文。? 正确实现如下:# views.pyfrom django.contrib.auth.mixins import LoginRequiredMixinfrom django.views.generic import ListViewclass PhotoList(LoginRequiredMixin, ListView): model = Photo template_name = 'main/gallery.html' context_object_name = 'photos' paginate_by = 12 # 可选:启用分页 def get_queryset(self): # 始终从当前用户出发过滤 qs = Photo.objects.filter(user=self.request.user) # 按 category 参数进一步筛选(若提供) category_name = self.request.GET.get('category') if category_name: qs = qs.filter(category__name=category_name) return qs def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 仅添加额外上下文,不干扰 photos 主体 context'categories' = Categories.objects.all() return context? 关键说明: 橙篇 百度文库发布的一款综合性AI创作工具

相关推荐
2601_962066495 分钟前
【玩转全栈】----Django模板的继承
数据库·django·sqlite
烂蜻蜓1 小时前
Flask入门教程(十二):表单处理——从基础到Flask-WTF完整实践
后端·python·flask
一只小bit1 小时前
Redis哨兵机制、主从复制与集群搭建与维护
数据库·redis·bootstrap
jay神1 小时前
【计算机毕业设计】基于Flask+Vue的电影数据可视化与智能推荐系统
前端·vue.js·python·信息可视化·flask·毕业设计·课程设计
满怀冰雪2 小时前
24-PaddleClas 模型评估、导出与推理部署入门
大数据·人工智能·python·深度学习·paddle
DeepVisionary7 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
zlwool7 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
阡之尘埃8 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
海兰8 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
cvcode_study8 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python