我有一个简单的
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)
本文地址 :CodeGo.net/9142725/
-------------------------------------------------------------------------------------------------------------------------
1. 这不是你做的领域。即使是语法的工作,只会给当值的类的定义,而不是在你访问它。你应该这样做,因为你的
@property
decorator,使它看起来像一个正常的属性。
@property
def name(self):
return ''.join(
[self.lastname,' ,', self.firstname, ' ', self.middlename])
self.lastname
2. 好吧......喜欢丹尼尔・罗斯曼的回答应该有工作。由于总是这样,你会发现你想要的,你发布问题后进行。 从Django的1.5的文档 CodeGo.net,我发现这个例子,制定正确的开箱即用。感谢所有的帮助。 这里是工作的代码:
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)
def _get_full_name(self):
"Returns the person's full name."
return '%s, %s %s' % (self.lastname, self.firstname, self.middlename)
full_name = property(_get_full_name)
class Meta:
ordering = ['lastname','firstname', 'middlename']
class EmployeeAdmin(admin.ModelAdmin):
list_display = ('clocknumber','full_name')
fieldsets = [("Name", {"fields":(("lastname", "firstname", "middlename"), "clocknumber")}),
]
admin.site.register(Employee, EmployeeAdmin)
3. 定义save()方法。
class Employee(models.Model):
name = models.CharField(max_length=200)
def save(self):
super(Employee, self).save()
self.name = ''.join(
[self.lastname,
',',
self.firstname,
' ',
self.middlename])
super(Employee, self).save()