Tôi có kiểu Employee
đơn giản bao gồm các trường firstname
, lastname
và middlename
.Cách thêm trường được tính toán vào kiểu Django
Về phía quản trị và khả năng ở những nơi khác, tôi muốn để hiển thị rằng:
lastname, firstname middlename
Đối với tôi những nơi hợp lý để làm điều này là trong mô hình bằng cách tạo ra một lĩnh vực tính toán như vậy:
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)
Cuối cùng những gì tôi nghĩ tôi cần là lấy giá trị của trường tên dưới dạng chuỗi. Lỗi tôi nhận được là value_to_string() takes exactly 2 arguments (1 given)
. Giá trị cho chuỗi muốn self, obj
. Tôi không chắc chắn những gì obj
có nghĩa là.
Phải có cách dễ dàng để thực hiện việc này, tôi chắc chắn tôi không phải là người đầu tiên muốn thực hiện việc này.
Chỉnh sửa: Đây là mã của tôi được sửa đổi thành câu trả lời của Daniel. Lỗi tôi nhận được là:
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)
thể trùng lặp của [Django mẫu: giá trị trường là tính fileds khác] (http://stackoverflow.com/questions/11465293/django-model-field-value-là-tính-of-khác-nộp) – Anto