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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:06:19