Предположим, что у меня есть модель Book, содержащая внешний ключ к модели Publisher.
Как я могу отобразить в администраторе Django столбец с количеством книг, опубликованных каждым издателем, способом что я могу использовать встроенную сортировку?
Попробуйте следующее:
создайте новый Manager (и агрегат с подсчетом в поле отношения книги):
class PublisherManager(models.Manager):
def get_query_set(self):
return super(PublisherManager,self).get_query_set().annotate(pubcount=Count('book'))
отсортируйте его по pubcount
:
class Publisher(models.Model):
......
objects = PublisherManager()
class Meta:
ordering = ('pubcount',)
Вы действительно должны начать с добавления:
class PublisherManager(models.Manager):
def get_query_set(self):
return super(PublisherManager,self).get_query_set().annotate(pubcount=Count('book'))
Но правильный способ добавить его как сортируемое поле:
class Publisher(models.Model):
......
objects = PublisherManager()
def count(self):
return self.pubcount
count.admin_order_field = 'pubcount'
А затем вы можете просто добавить «count» к атрибуту list_display администратора модели в admin.py
Попробуйте что-то вроде этого:
class PublisherAdminWithCount(Admin):
def book_count(self, obj):
return obj.book_set.count()
list_display = ('user_count',)
admin.site.register(Group, PublisherAdminWithCount)