[ django-admin外键字段自动生成的增删改查按钮去除 ]


隐藏 Django Admin 自动完成外键字段(如 leader_user)后面的四个按钮(编辑、添加、删除、查看)

admin.py

@admin.register(User)
class UserAdmin(auth_admin.UserAdmin):
    form = UserAdminChangeForm
    add_form = UserAdminCreationForm
    autocomplete_fields = ['leader_user']
    filter_horizontal = (
        "groups",
        "user_permissions",
        "work_groups"
    )
    fieldsets = (
        (None, {"fields": ("username", "password")}),
        (_("Personal info"), {"fields": ("name", "email", "leader_user", "enable_email")}),
        (
            _("Permissions"),
            {
                "fields": (
                    "is_active",
                    "is_staff",
                    "is_superuser",
                    "first_line",
                    "upload_svg",
                    "groups",
                    "user_permissions",
                    "work_groups",
                ),
            },
        ),
        (_("Important dates"), {"fields": ("last_login", "date_joined")}),
    )
    list_display = ["username", "name" , "email", "leader_user_email", "is_superuser", "enable_email"]
    search_fields = ["username", "name"]
    inlines = [GnsUserInline]

    def leader_user_email(self, obj):
        return obj.leader_user.email if obj.leader_user else ""

    leader_user_email.short_description = 'Leader Email'

    # 这个就是控制显示
    def formfield_for_dbfield(self, db_field, request, **kwargs):
        formfield = super().formfield_for_dbfield(db_field, request, **kwargs)
        if db_field.name == "leader_user":
            formfield.widget.can_delete_related = False
            formfield.widget.can_change_related = False
            formfield.widget.can_add_related = False  
            formfield.widget.can_view_related = False  
        return formfield

models.py

class User(AbstractUser):
    """
    Default custom user model for backend.
    If adding fields that need to be filled at user signup,
    check forms.SignupForm and forms.SocialSignupForms accordingly.
    """

    class RoleType(TextChoices):
        TESTER = "Tester"
        CHECKER = "Checker"
        ENDORSER = "Endorser"

    staffNo = CharField(max_length=255, default="")
    name = CharField(_("Name of User"), blank=True, max_length=255)
    enable_email = models.BooleanField(default=True)
    work_groups =  models.ManyToManyField("cews.Workgroup" ,blank=True, default=None)
    leader_user = models.ForeignKey("self", on_delete=models.SET_NULL, blank=True, null=True,verbose_name="Leader Email" )
    first_line = models.BooleanField(_("FirstLine"), default=False, help_text="Assgin userfor access FirstLine")
    upload_svg = models.BooleanField(_("UploadSVG"), default=False, help_text="Assgin user for upload SVG")
    # role = CharField(choices=RoleType.choices, default=RoleType.TESTER, max_length=255)
    # username = CharField(max_length=255, default="")
    # password = CharField(max_length=255, default="")
    # update = DateTimeField(default=timezone.now)

最后效果