小编int*_*ist的帖子

Django Admin中列表视图和更改视图的不同查询集优化

get_queryset管理模型的方法可以被覆盖;我用它来选择/预取OneToOneFields 或ManyToManyFields 的对象。但是,我的模型的列表视图仅显示简明信息,而更改视图包含更多对象。ManyToManyField如果无论如何都不会显示这些关系,那么在列表视图中预取关系是没有意义的。

样品型号:

class Location(TimeStampedModel):
    owner = models.ForeignKey('Profile', on_delete=models.CASCADE)
    postcode = models.CharField("postcode", max_length=11, blank=True)
    tenants = models.ManyToManyField('Profile', blank=True)
Run Code Online (Sandbox Code Playgroud)

示例管理模型:

@admin.register(Location)
class LocationAdmin(admin.ModelAdmin):
    list_display = ('owner', 'postcode')
    fields = ('owner', 'postcode', 'tenants')
    filter_horizontal = ('tenants',)

    def get_queryset(self, request):
        qs = super(LocationAdmin, self).get_queryset(request).select_related('owner__user')
        qs = qs.prefetch_related('tenants')
        return qs
Run Code Online (Sandbox Code Playgroud)

是否可以为模型列表视图返回的查询集和同一模型的更改/添加视图返回的查询集定义不同的优化?

也就是说,在上面的示例管理模型中,该qs.prefetch_related('tenants')行将仅与更改/添加视图相关?

django-admin

4
推荐指数
1
解决办法
2150
查看次数

标签 统计

django-admin ×1