Django Admin:自动选择当前用户
--转载自:林肯李
该文章写的很好,特转载留待后期备用
背景
在开发 CMS 时,经常需要标记谁创建了记录。Django 为我们提供了一个很好的管理界面。但是当我们只使用默认值时,用户需要自己选择他们是谁。我们想为他们自动选择,他们不能假装是其他人。
代码
在 django models.py 中,我们有以下内容:
# 模型.py class Notes(models.Model): title = models.CharField(max_length=255) content = models.TextField() date = models.DateField() created_by = models.ForeignKey(User, related_name="Created By")
我们希望为登录用户自动设置 created_by。
所以在我们的管理员中:
# admin.py class NotesAdmin(admin.ModelAdmin): def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'created_by': kwargs['queryset'] = User.objects.filter(username=request.user.username) return super(NotesAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) def get_readonly_fields(self, request, obj=None): if obj is not None: return self.readonly_fields + ('created_by',) return self.readonly_fields def add_view(self, request, form_url="", extra_context=None): data = request.GET.copy() data['created_by'] = request.user request.GET = data return super(NotesAdmin, self).add_view(request, form_url="", extra_context=extra_context) admin.site.register(Notes, NotesAdmin)
解释
add_view 函数帮助我们从下拉列表中选择当前用户。
formfield_for_foreignkey 帮助我们过滤掉其他用户。
通过结合这两个函数,我们得到:
最后一个 get_readonly_fields 函数使该字段创建后无法编辑。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具