如何计算的字段添加到一个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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章