Mam prosty model Employee
, który zawiera pola firstname
, lastname
i middlename
.Jak dodać pole obliczeniowe do modelu Django
Po stronie administratora i prawdopodobnie gdzie indziej, chciałbym, aby wyświetlić że jako:
lastname, firstname middlename
Dla mnie logicznym miejscem na to jest w modelu poprzez stworzenie pola obliczeniowego jako takie:
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)
Ostatecznie to, czego potrzebuję, to uzyskanie wartości pól nazw jako ciągów. Błąd, który otrzymuję, to value_to_string() takes exactly 2 arguments (1 given)
. Wartość do napisu ma wartość self, obj
. Nie jestem pewien, co oznacza obj
.
Musi być łatwy sposób na zrobienie tego, jestem pewien, że nie jestem pierwszym, który tego chce.
Edytuj: To jest mój kod zmodyfikowany do odpowiedzi Daniela. Otrzymuję błąd:
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)
możliwe duplikat [Django Model Wartość pola obliczenie innych fileds] (http://stackoverflow.com/questions/11465293/django-model-field-value-is-calculation-of-other-fileds) – Anto