如何計算的字段添加到一個Django模型


我有一個簡單的Employee模型,其中包括firstnamelastnamemiddlename領域。 在管理方和可能的其他地方,我想顯示爲:
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.這不是你做的領域。即使是語法的工作,只會給當值的類的定義,而不是在你訪問它。你應該這樣做,因爲你的@propertydecorator,使它看起來像一個正常的屬性。
@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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章