Как скрыть столбец, назначенный для "list_display" и "list_display_links" для "list_editable" в Django?

У меня есть Person модель ниже:

# "store/models.py"

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)

Затем, я назначил "first_name" и "last_name" на list_display и list_editable, чтобы сделать их редактируемыми, как показано ниже:

# "store/admin.py"

from django.contrib import admin
from .models import Person

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ("first_name", "last_name") # Here
    list_editable = ("first_name", "last_name") # Here

Затем, я получил ошибку ниже:

ERRORS: <class 'store.admin.PersonAdmin'>: (admin.E124) The value of 'list_editable[0]' ссылается на первое поле в 'list_display' ('first_name'), которое не может быть использовано, если не установлено значение 'list_display_links'. установлен.

Итак, я назначил "id" на list_display и list_display_links как показано ниже:

# "store/admin.py"

from django.contrib import admin
from .models import Person

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):         # Here
    list_display = ("first_name", "last_name", "id")
    list_editable = ("first_name", "last_name")
    list_display_links = ("id", ) 
                        # Here

Затем ошибка была устранена, и 3 колонки были отображены, как показано ниже. Теперь я хочу скрыть 3-ю колонку "ID", которая мне не нужна:

enter image description here

Итак, как я могу скрыть третью колонку "ID" ?

Вы можете создать пользовательский столбец "hidden" с помощью hidden() затем переименовать его с помощью @admin.display(description="") затем назначить его list_display и list_display_links как показано ниже:

# "store/admin.py"

from django.contrib import admin
from .models import Person

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):           # Here
    list_display = ("first_name", "last_name", "hidden")
    list_editable = ("first_name", "last_name")
    list_display_links = ("hidden", )
                          # Here
                   
    @admin.display(description="") # Here
    def hidden(self, obj):
        return "" 

Тогда вы можете отобразить только 2 колонки, которые вам нужны, как показано ниже:

enter image description here

Установите list_display_links = None в классе modeladmin.

from django.contrib import admin
from .models import Person

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ("first_name", "last_name")
    list_editable = ("first_name", "last_name")
    list_display_links = None
Вернуться на верх