Próbuję utworzyć jedno pole w zestawach pól Django administratora, aby wyświetlać tylko niektóre dane, ale zgodnie z django document pokazano tylko przykład list_display
, aby można było dostosować. Próbowałem podobnego podejścia na fieldsets
jak następuje:Administrator django: Jak dostosować jedno pole w zestawach pól?
W models.py:
def ports_with_same_scanner(self):
return PortList.objects.filter(scanner=self.scanner)
ports_with_same_scanner.short_description = 'port_lists'
W admin.py, to nie będzie działać:
fieldsets = (
('Scan Template', {
'fields': (('name', 'scanner', 'ports_with_same_scanner',), 'comment', ('in_use',
'fc_growing', 'nc_growing'), 'nvt_prefs')
}),
)
Jeśli jednak zrobić to:
list_display = ('name', 'scanner', 'ports_with_same_scanner', 'comment', 'in_use', 'fc_growing', 'nc_growing', 'nvt_prefs')
ports_with_same_scanner
działa dobrze. Problem polega na tym, że nie chcę zmienić wyświetlacza z fieldsets
na list_display
, zastanawiam się, w jaki sposób mogę osiągnąć tę samą funkcjonalność. Dzięki.
Ponieważ ' ports_with_same_scanner' nie jest faktycznym polem w Modelu, jak powyższy kod się nie sprawdza? Jeśli spróbuję zdefiniować pole inne niż model w mojej definicji 'fieldsets', Django utworzy pole' FieldError: Unknown field (s) (my_field_1, my_field_2) określone dla MyModel. Sprawdź pola/zestawy pól/wyklucz atrybuty klasy MyModelAdmin. ", A to zepsuje, ZANIM wywoła metodę" formfield_for_foreignkey() ". W jaki sposób definiujesz 'ports_with_same_scanner' w sposób, który sprawia, że Django jest szczęśliwy? – Troy