Django admin pozwala na zdefiniowanie listy pól które mają być wyświetlane w liście a panelu admina.
class MyModel(models.Model): .... class Admin: list_display=['name','surname',...]
Pola te nie muszą być stricte polami modelu ( czyli dziedziczącymi z models.Field ), ale mogą to być również zwykłe pola klasy, lub też metody. Jeżeli jest to metoda obiektu zostanie ona wywołana a jej wynik znajdzie się w kolumnie. I tak np. możemy zrobić sobie:
class MyModel(models.Model): name = models.CharField(max_length=100) surname = models.CharField(max_length=100) ... def full_name(self): return u"%s %s"%(self.name, self.surname) class Admin: list_display=['login','full_name','email']
Dla każdego obiektu zostanie wywołana metoda full_name a wynik jej działania będzie widoczny w kolumnie "full_name"
Wynik wywołania funkcji zostanie przed pokazaniem w templacie wyeskejpowany, ale i na to twórcy django zrobili obejście. Jeżeli takiej metodzie damy atrybut allow_tags ( metody i funkcje w pythonie również mogą posiadać atrybuty ). Jeżeli np. chcemy aby taka kolumna była jakoś wyróżniona możemy zrobić to tak (przykład jak wyżej):
class MyModel(models.Model): name = models.CharField(max_length=100) surname = models.CharField(max_length=100) ... def full_name(self): return u'%s %s'%(self.name, self.surname) full_name.allow_tags = True full_name.short_description = "Full name" class Admin: list_display=['full_name',]
Po takiej deklaracji kolumna będzie miała nazwę "Full name", a wartości w niej znajdujące się będą miały kolor czerwony.
UWAGA: należy pamiętać o wyeskejpowaniu wartości które mogły zostać wprowadzone przez użytkownika.
W połączeniu z własnymi templatami do listy obiektów, które dziedziczą z szablonu "admin/change_list.html" możliwe jest np. dodanie możliwości masowego kasowania lub modyfikowania obiektów.
Brak komentarzy:
Prześlij komentarz