隐藏 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)
最后效果
