我有一个简单的 Employee 模型,包括 firstname , lastname 和 middlename 字段。
I have a simple Employee model that includes firstname, lastname and middlename fields.
在管理端,可能在其他地方,我想显示为:
On the admin side and likely elsewhere, I would like to display that as:
lastname, firstname middlename对我来说,通过创建计算字段,我们可以在模型中创建一个合适的地方:
To me the logical place to do this is in the model by creating a calculated field as such:
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()只需要2个参数(1个给定)。字符串的值要 self,obj 。我不知道 obj 是什么意思。
Ultimately what I think I need is to get the value of the name fields as strings. The error I am getting is value_to_string() takes exactly 2 arguments (1 given). Value to string wants self, obj. I am not sure what obj means.
必须有一个简单的方法来做到这一点,我相信我不是第一个要这样做的人。
There must be an easy way to do this, I am sure I am not the first to want to do this.
编辑:这是我的代码修改为丹尼尔的答案。我得到的错误是:
This is my code modified to Daniel's answer. The error I get is:
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)推荐答案
Ok ... Daniel Roseman的转身似乎应该有效。总是这样,你发现问题后,你会发现你想要的。
Ok... Daniel Roseman's answer seemed like it should have worked. As is always the case, you find what your looking for after you post the question.
从django 1.5文档我发现这个例子,这个例子就是开箱即用的。感谢所有的帮助。
From the django 1.5 docs I found this example that worked right out of the box. Thanks to all for your help.
这是代码的工作原理:
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)更多推荐
如何将计算的字段添加到Django模型
发布评论