Как добавить поддающийся сортировке столбец количества к администратору Django модели с many-one отношением?

Предположим, что у меня есть модель Book, содержащая внешний ключ к модели Publisher.

Как я могу отобразить в администраторе Django столбец с количеством книг, опубликованных каждым издателем, способом что я могу использовать встроенную сортировку?

48
задан GJ. 15 August 2010 в 21:57
поделиться

3 ответа

Попробуйте следующее:

создайте новый 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',)
8
ответ дан 7 November 2019 в 12:30
поделиться

Вы действительно должны начать с добавления:

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

1
ответ дан 7 November 2019 в 12:30
поделиться

Попробуйте что-то вроде этого:

class PublisherAdminWithCount(Admin):

    def book_count(self, obj):
        return obj.book_set.count()

    list_display = ('user_count',)

admin.site.register(Group, PublisherAdminWithCount)
0
ответ дан 7 November 2019 в 12:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: