我想在 Django 的 list_display 属性中显示相关对象的数量。 例如,我们有一个类别字段,我们想显示在该类别中发布了多少博文
到目前为止我已经试过了:
管理员.py:
from .models import Category
class CategoryAdmin(admin.ModelAdmin):
def category_post_count(self, obj):
return obj.post_set.count
category_post_count.short_description = "Posts Count"
list_display = ['category', 'category_post_count']
模型.py:
class Category(models.Model):
category = models.CharField(max_length=25)
class Post(models.Model):
category = models.ForeignKey(Category, null=True, blank=False)
最佳答案
虽然接受的答案会产生预期的结果,但在大多数情况下这不是应该的做法,因为它会产生“n+1”问题,也就是每行多一个 sql 查询。
你应该修改你的管理类(或者管理器,如果你在更多情况下需要它而不仅仅是管理)来检索一个计数注释(这是 django 的聚合列术语)然后使用这个值。它将计算主选择查询中的计数,避免生成不必要的查询。
...
from django.db.models import Count
...
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = [..., 'post_count']
...
def post_count(self, obj):
return obj.post_count
def get_queryset(self, request):
queryset = super().get_queryset(request)
queryset = queryset.annotate(post_count=Count("post"))
return queryset
关于python - Django:在admin list_display中显示相关对象的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32443471/