gpt4 book ai didi

python - Django:在admin list_display中显示相关对象的数量

转载 作者:太空狗 更新时间:2023-10-29 18:02:17 24 4
gpt4 key购买 nike

我想在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com