【发布时间】:2013-07-14 23:45:00
【问题描述】:
我有一个简单的Employee 模型,其中包括firstname、lastname 和middlename 字段。
在管理方面,可能在其他地方,我想将其显示为:
lastname, firstname middlename
对我来说,这样做的合乎逻辑的地方是在模型中创建一个计算字段:
from django.db import models
from django.contrib import admin
class Employee(models.Model):
lastname = models.CharField("Last", max_length=64)
firstname = models.CharField("First", max_length=64)
middlename = models.CharField("Middle", max_length=64)
clocknumber = models.CharField(max_length=16)
name = ''.join(
[lastname.value_to_string(),
',',
firstname.value_to_string(),
' ',
middlename.value_to_string()])
class Meta:
ordering = ['lastname','firstname', 'middlename']
class EmployeeAdmin(admin.ModelAdmin):
list_display = ('clocknumber','name')
fieldsets = [("Name", {"fields":(("lastname", "firstname", "middlename"), "clocknumber")}),
]
admin.site.register(Employee, EmployeeAdmin)
我认为我最终需要的是获取名称字段的值作为字符串。我得到的错误是value_to_string() takes exactly 2 arguments (1 given)。字符串的值需要self, obj。我不确定obj 是什么意思。
一定有一个简单的方法可以做到这一点,我相信我不是第一个想要这样做的人。
编辑:下面是我修改为丹尼尔答案的代码。我得到的错误是:
django.core.exceptions.ImproperlyConfigured: EmployeeAdmin.list_display[1], 'name' is not a callable or an attribute of 'EmployeeAdmin' of found in the model 'Employee'.
from django.db import models
from django.contrib import admin
class Employee(models.Model):
lastname = models.CharField("Last", max_length=64)
firstname = models.CharField("First", max_length=64)
middlename = models.CharField("Middle", max_length=64)
clocknumber = models.CharField(max_length=16)
@property
def name(self):
return ''.join(
[self.lastname,' ,', self.firstname, ' ', self.middlename])
class Meta:
ordering = ['lastname','firstname', 'middlename']
class EmployeeAdmin(admin.ModelAdmin):
list_display = ('clocknumber','name')
fieldsets = [("Name", {"fields":(("lastname", "firstname", "middlename"), "clocknumber")}),
]
admin.site.register(Employee, EmployeeAdmin)
【问题讨论】:
标签: python django-models django-admin