Django Admin – 設定顯示欄位



當模型註冊到Django的Admin站點時,點選模型名稱會顯示其物件的列表。

下圖顯示了Employees模型中物件的列表:

Django Admin Set Fields 1

但是,上面的頁面顯示的物件形式為Employee object(1),並沒有顯示namecontact等屬性。為了使物件描述更友好,我們需要重寫employee模型類中的__str__()方法

為了給出其物件的替代字串表示,employee類被改寫如下:

from django.db import models

class Employee(models.Model):  
   empno = models.CharField(max_length=20)  
   empname = models.CharField(max_length=100)    
   contact = models.CharField(max_length=15)  
   salary = models.IntegerField()
   joined_date = models.DateField(null=True)

   class Meta:  
      db_table = "employee"
    
   def __str__(self):
      return "Name: {}, Contact: {}".format(self.empname, self.contact)

對模型定義進行這些更改,然後重新整理admin站點的首頁(如果Django伺服器尚未執行,請啟動它)。

點選MYAPP下的Employees模型以顯示employee物件的詳細資訊:

Django Admin Set Fields 2

如果點選任何物件詳情,則會顯示一個顯示物件屬性的表單,您可以在此處更新物件或刪除物件。

Django Admin Set Fields 3

您可以使用admin.ModelAdmin物件的“list_display”屬性自定義“更改列表頁面”,該屬性指定在更改列表中顯示哪些列。

ModelAdmin類是在admin介面中模型的表示。通常,這些儲存在應用程式中的名為admin.py的檔案中。

透過繼承ModelAdmin類定義EmployeeAdmin類。將list_display屬性設定為要顯示的欄位的元組。

from django.contrib import admin

# Register your models here.
from .models import Employee

class EmployeeAdmin(admin.ModelAdmin):
   list_display = ("empname", "contact", "joined_date")

註冊EmployeeAdmin類如下:

admin.site.register(Employee, EmployeeAdmin)

您也可以使用@admin.register()裝飾器註冊模型:

from django.contrib import admin

# Register your models here.
from .models import Employee

@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
   list_display = ("empname", "contact", "joined_date")

儲存上述更改並重新整理Admin站點以顯示Employee物件的列表:

Django Admin Set Fields 4

您還可以為列表頁面提供搜尋功能。在EmployeeAdmin類中新增search_fields屬性:

@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
   list_display = ("empname", "contact", "joined_date")
   search_fields = ("empname__startswith", )

現在列表頁面頂部顯示了一個搜尋欄位。搜尋基於員工姓名。__startswith修飾符將搜尋限制為以搜尋引數開頭的名稱。

Django Admin Set Fields 5

因此,Django Admin介面是完全可定製的。您可以透過在admin類中提供fields屬性來設定在更新表單中提供的欄位。

廣告