Próbuję znaleźć sposób, aby wyświetlić następujące RelativeInline tylko jeśli Person.is_member jest True.Warunkowo wbudowane w admin Django?
Aktualny admin.py:
class RelativeInline(admin.TabularInline):
model = Relative
fk_name = 'member'
class PersonAdmin(admin.ModelAdmin):
inlines = [RelativeInline,]
ordering = ('first_name',)
list_filter = ('is_member',)
search_fields = ('first_name', 'last_name',)
date_hierarchy = 'member_date'
list_display = ('first_name', 'last_name', 'is_member', 'member_date', 'photo')
admin.site.register(Person, PersonAdmin)
Jedyną wskazówką udało mi się znaleźć jest to, że mogę być w stanie przesłonić get_formset, ale nie mogłem znaleźć dobry przykład, więc moja słaba próba nie działa.
Oto moja nieudana próba:
class RelativeInline(admin.TabularInline):
model = Relative
fk_name = 'member'
class PersonAdmin(admin.ModelAdmin):
ordering = ('first_name',)
list_filter = ('is_member',)
search_fields = ('first_name', 'last_name',)
date_hierarchy = 'member_date'
list_display = ('first_name', 'last_name', 'is_member', 'member_date', 'photo')
def get_formset(self, request, obj=None, **kwargs):
if obj.is_member:
inlines = [RelativeInline,]
return super(PersonAdmin, self).get_formset(request, obj, **kwargs)
admin.site.register(Person, PersonAdmin)
Brak błędów generowanych przez ten kod, ale nie inline pojawia się niezależnie od tego, czy Person.is_member prawdziwe czy fałszywe.
Aktualizacja: Przyjaciel zaproponował mi spróbować zmienić:
inlines = [RelativeInline,]
do:
self.inlines = [RelativeInline,]
ale bezskutecznie. Próbowałem również:
PersonAdmin.inlines = [RelativeInline,]
, ale wynik był taki sam - brak błędu, brak linii.
aktualizacja na rok 2014 i django 1.6: 'inline w self.get_inline_instances (wniosek, obj):' – imposeren