如何将Django Admin模型列名改为Name、Email、Number?
Django Admin列表列标题自定义方案
你的需求是把Admin列表中的列标题从cn_name、cn_email、cn_number改为Name、Email、Number,现有代码存在两处问题:一是自定义的cn_name方法返回的是整个对象而非字段值,二是未处理另外两个字段的标题。以下是两种可行的解决方法:
方法一:在Admin类中自定义字段显示(无需修改模型)
直接在ContactAdmin类中为每个字段创建对应方法,用@admin.display(description)指定列标题,返回对应字段的值:
from django.contrib import admin from .models import contactEnquiries class ContactAdmin(admin.ModelAdmin): # 使用自定义方法作为列表显示项 list_display = ['get_name', 'get_email', 'get_number'] @admin.display(description='Name') def get_name(self, obj): return obj.cn_name @admin.display(description='Email') def get_email(self, obj): return obj.cn_email @admin.display(description='Number') def get_number(self, obj): return obj.cn_number admin.site.register(contactEnquiries, ContactAdmin)
方法二:修改模型字段的verbose_name(更简洁)
如果允许修改模型,直接给每个字段添加verbose_name参数,Django Admin会自动将其作为列标题,无需改动Admin类的核心代码:
models.py 修改内容:
from django.db import models class contactEnquiries(models.Model): cn_name = models.CharField(max_length=100, verbose_name='Name') cn_email = models.EmailField(verbose_name='Email') cn_number = models.CharField(max_length=20, verbose_name='Number') # 其他字段及方法... def __str__(self): return self.cn_name
admin.py 保持简洁:
from django.contrib import admin from .models import contactEnquiries class ContactAdmin(admin.ModelAdmin): list_display = ['cn_name', 'cn_email', 'cn_number'] admin.site.register(contactEnquiries, ContactAdmin)
两种方法都能实现你的需求,方法二更简洁且符合Django的设计规范,推荐优先使用。
内容的提问来源于stack exchange,提问作者Libin Thomas
相关产品推荐
相关产品推荐

