在Django框架中,admin.py
文件通常用于自定义管理后台的行为。要在admin.py
中访问当前用户,可以通过重写管理类中的方法来实现。以下是一个基本的示例,展示了如何在admin.py
中获取当前登录的用户:
假设我们有一个模型MyModel
,我们想要在管理后台的操作中访问当前用户:
from django.contrib import admin
from django.contrib.auth.models import User
from .models import MyModel
class MyModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
# 在保存模型实例之前,可以访问当前用户
obj.modified_by = request.user
super().save_model(request, obj, form, change)
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(created_by=request.user)
admin.site.register(MyModel, MyModelAdmin)
save_model
方法: 在保存模型实例时,可以通过request.user
获取当前用户,并将其信息保存到模型实例中。get_queryset
方法: 根据当前用户的权限过滤查询集,例如只显示该用户创建的记录。如果在尝试访问request.user
时遇到问题,可能是因为中间件没有正确设置或用户认证系统没有正确配置。确保在MIDDLEWARE
设置中包含了django.contrib.auth.middleware.AuthenticationMiddleware
。
MIDDLEWARE = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
]
通过以上设置和方法,可以在Django的管理后台中有效地访问和利用当前用户的信息。
领取专属 10元无门槛券
手把手带您无忧上云