Django Admin站点:限制用户仅操作自身博客内容
Django Admin实现用户仅操作自己的博客条目
Django Admin本身没有默认的一键开关,但可以通过自定义ModelAdmin轻松实现这个需求,只需要修改你的admin.py并确保模型包含用户关联字段即可。
第一步:确保Blog模型关联用户
首先,你的Blog模型需要添加一个外键字段关联Django的内置User模型,用来记录每个博客的作者:
from django.db import models from django.contrib.auth.models import User class Blog(models.Model): title = models.CharField(max_length=100) content = models.TextField() user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者") # 可根据需求添加创建时间等其他字段,比如: # created_at = models.DateTimeField(auto_now_add=True)
第二步:修改admin.py实现权限控制
替换原来的注册代码,自定义BlogAdmin类来实现权限限制:
from django.contrib import admin from .models import Blog class BlogAdmin(admin.ModelAdmin): # 列表页显示的字段,可根据你的模型调整 list_display = ('title', 'user') def get_queryset(self, request): # 控制列表页显示内容:普通用户只看自己的博客,超级管理员看全部 queryset = super().get_queryset(request) if request.user.is_superuser: return queryset return queryset.filter(user=request.user) def has_change_permission(self, request, obj=None): # 编辑权限:超级管理员或当前用户是博客作者 if request.user.is_superuser: return True return obj and obj.user == request.user def has_delete_permission(self, request, obj=None): # 删除权限逻辑和编辑一致 if request.user.is_superuser: return True return obj and obj.user == request.user def save_model(self, request, obj, form, change): # 新增博客时自动将当前登录用户设为作者,无需手动选择 if not change: obj.user = request.user super().save_model(request, obj, form, change) admin.site.register(Blog, BlogAdmin)
实现效果
- 普通用户登录Admin后,只能看到自己发布的博客条目
- 只能编辑、删除自己的博客,无法操作其他用户的内容
- 新增博客时,作者字段会自动填充为当前登录用户,无需手动设置
- 超级管理员不受限制,可查看、编辑所有用户的博客
内容的提问来源于stack exchange,提问作者filtertips
相关产品推荐
相关产品推荐

