回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个简单的<code>Employee</code>模型,其中包括<code>firstname</code>、<code>lastname</code>和<code>middlename</code>字段。</p>
<p>在管理方面,可能在其他方面,我想显示为:</p>
<pre><code>lastname, firstname middlename
</code></pre>
<p>对我来说,这样做的逻辑位置是在模型中创建一个计算字段:</p>
<pre><code>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)
</code></pre>
<p>最终,我认为我需要的是将名称字段的值作为字符串获取。我得到的错误是<code>value_to_string() takes exactly 2 arguments (1 given)</code>。字符串的值需要<code>self, obj</code>。我不知道<code>obj</code>是什么意思。</p>
<p>一定有一个简单的方法来做这件事,我相信我不是第一个想做这件事的人。</p>
<p>编辑:这是我根据丹尼尔的回答修改的代码。我得到的错误是:</p>
<pre><code>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)
</code></pre>