Django中Admin站点模型的扩展

时间:2025-03-13 07:13:37
from django.contrib import admin from .models import Resource @admin.register(Resource) class ResourceAdmin(admin.ModelAdmin): # list_display: 定义在admin列表中显示的字段。 list_display = ('name', 'description', 'created_at', 'updated_at') # list_display_links: 定义哪些字段可以点击跳转到资源的详情页。 list_display_links = ('name',) # list_filter: 定义用于过滤列表的字段。通常用于那些具有多个可能值的字段,比如状态、类型等。 list_filter = ('status', 'category') # list_per_page: 定义每页显示的记录数。默认是100条。 list_per_page = 20 # search_fields: 定义用于搜索的字段。用户可以在搜索框中输入文本,Django会在这些字段中查找匹配的内容。 search_fields = ('name', 'description') # 其他可选属性: # ordering: 定义资源的默认排序方式。可以是字段名或者带有'-'前缀的字段名来表示降序。 ordering = ('-created_at',) # fields: 在编辑或添加资源时,定义要显示的字段顺序。 fields = ('name', 'description', 'status', 'category', 'created_at', 'updated_at') # readonly_fields: 定义哪些字段是只读的,用户在编辑页面无法修改这些字段。 readonly_fields = ('created_at', 'updated_at') # formfield_overrides: 用于覆盖某些字段的表单字段类型。例如,可以将CharField覆盖为Textarea。 formfield_overrides = { models.CharField: {'widget': forms.Textarea}, } # 在资源详情页显示额外的信息或者自定义HTML。 def resource_details(self, obj): return f'<p>Resource ID: {obj.id}</p><p>Category: {obj.category.name}</p>' resource_details.allow_tags = True # 允许HTML标签 # 将自定义方法添加到list_display中 list_display.append('resource_details') # 注意:这样添加可能会导致性能问题,因为每个对象都会调用该方法。 # 更好的做法是使用自定义的ModelAdmin方法,并在admin_change_list_template中自定义模板,但这超出了基础配置的范畴。