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
相关产品推荐
相关产品推荐

