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

Django Model Admin如何设置仅展示当前登录用户而非全部用户

Django Model Admin外键下拉框用户范围过滤实现方案

问题根源

你当前仅通过get_queryset限制了可查询的数据范围,该方法不会影响表单字段的可选选项集合,因此编辑页的用户下拉框仍会展示全部用户。

实现方法

在你现有的Museum_ItemAdmin类中新增formfield_for_foreignkey方法,专门定制user外键字段的查询集即可:

from django.contrib.auth.models import User # 确保你已经导入User模型

class Museum_ItemAdmin(admin.ModelAdmin):
    # 你现有的get_queryset方法保留
    def get_queryset(self, request):
        qs = super(Museum_ItemAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(user=request.user)
    
    # 新增如下方法过滤用户下拉框选项
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "user" and not request.user.is_superuser:
            # 仅将当前登录用户加入可选范围
            kwargs["queryset"] = User.objects.filter(id=request.user.id)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

可选安全加固(推荐)

如果普通用户无需修改关联的用户信息,可以直接将user字段设为普通用户的只读字段,彻底避免关联关系被篡改:

class Museum_ItemAdmin(admin.ModelAdmin):
    # 前面的get_queryset、formfield_for_foreignkey方法保留
    def get_readonly_fields(self, request, obj=None):
        # 非超级用户场景下将user加入只读字段
        if not request.user.is_superuser:
            return self.readonly_fields + ('user',)
        return self.readonly_fields

内容的提问来源于stack exchange,提问作者Avgoustis Avgousti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:24:02