You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何从自定义用户模型获取登录用户并设置Admin默认值

在Django产品Admin中设置默认登录用户

针对你的自定义用户模型和产品模型,有两种方法可以实现新增产品时默认关联当前登录用户:

方法一:新增页面自动填充当前用户(允许手动修改)

在产品的Admin类中重写get_form方法,从请求中获取当前用户并设置为admin字段的初始值:

from django.contrib import admin
from .models import products

class ProductAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        # 仅在新增产品时设置初始值
        if obj is None:
            form.base_fields['admin'].initial = request.user
        return form

admin.site.register(products, ProductAdmin)

方法二:自动关联当前用户(禁止手动修改)

如果希望用户无法手动选择管理员,直接在保存时自动绑定当前登录用户,可以重写save_model方法,同时隐藏admin字段:

from django.contrib import admin
from .models import products

class ProductAdmin(admin.ModelAdmin):
    # 隐藏admin字段,不让用户在页面中看到
    exclude = ('admin',)

    def save_model(self, request, obj, form, change):
        # 新增产品时自动设置admin为当前用户
        if not change:
            obj.admin = request.user
        super().save_model(request, obj, form, change)

admin.site.register(products, ProductAdmin)

额外优化:完善用户模型的显示

为了在Admin中更直观地显示用户信息,建议给你的Account模型添加__str__方法:

class Account(AbstractBaseUser, PermissionsMixin):
    # ... 现有字段及方法 ...

    def __str__(self):
        return self.nickname  # 也可以返回 f"{self.name} {self.last_name}" 显示全名

这样在Admin的用户选择框或关联显示中,会清晰展示用户的昵称或全名。

内容的提问来源于stack exchange,提问作者Ryadovoy Zadrot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:35:18