Django 2.2中admin.py自定义queryset方法无法执行的问题
问题原因
Django 1.9及后续版本已经将ModelAdmin的查询集钩子方法从queryset()重命名为get_queryset(),你当前运行的Django 2.2版本不再兼容旧方法名,因此你自定义的queryset()方法不会被框架调用,列表页默认返回全量文件数据,权限控制逻辑失效。
修复方案
将Tiedostot3Admin中的自定义查询方法名改为get_queryset,同时调整父类方法调用的名称即可,修改后代码如下:
class Tiedostot3Admin(admin.ModelAdmin): fields = ['otsikko', 'kuvaus', 'tiedosto'] list_display = ('otsikko','paivitetty') inlines = [ Liitet3Inline, ] def get_queryset(self, request): print("get_queryset, request.user", request.user) qs = super(Tiedostot3Admin, self).get_queryset(request) if request.user.is_superuser: return qs return qs.filter(owner=request.user) def save_model(self, request, obj, form, change): print("save_model, request.user", request.user) obj.owner = request.user obj.save()
可选优化建议
如果你使用的是Python 3运行环境,可以将模型中定义的__unicode__方法统一替换为__str__,符合Python 3的字符串处理规范,避免后续出现编码异常。
内容的提问来源于stack exchange,提问作者Jaana
相关产品推荐
相关产品推荐

