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 ×1