Вот как выглядит мой класс Admin
class GuestAdmin(admin.ModelAdmin):
inlines = (GuestEpisodeAdmin, TopicGuestAdmin, JobGuestAdmin)
exclude = ('episodes', )
list_display = ('name', 'twitter', 'gender', 'medium', 'appearance_count', 'last_appearance')
list_filter = ['gender']
search_fields = ['name', 'twitter', 'bio', 'notes']
def get_queryset(self, request):
qs = super(GuestAdmin, self).get_queryset(request)
qs = qs.annotate(
_appearance_count=Count('episodes')
)
return qs
def appearance_count(self, obj):
return obj._appearance_count
def last_appearance(self, obj):
la = obj.episodes.order_by('-published_at').values_list('published_at', flat=True).all().first()
if isinstance(la, datetime.datetime):
la = la.strftime("%Y-%m-%d")
return la
# last_appearance.admin_order_field = 'last_appearance'
appearance_count.admin_order_field = '_appearance_count'
Таким образом, last_appearance происходит из эпизодов, связанных с гостем (отношение «многие ко многим») с использованием даты публикации из новейшего эпизода.Моя цель - сделать так, чтобы их можно было сортировать в виде списка администратора django.
Я узнал, что не могу получить это в get_queryset
, но я уверен, что есть способ.Я пока не смог найти.