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 函数使该字段创建后无法编辑。

posted @   十一的杂文录  阅读(500)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示