我有一個簡單的
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()