Django管理员列表显示-根据自定义名称预取
我已经为我的列表显示创建了一些自定义名称,但它们在我的管理列表显示中生成了500多个查询。我添加了一个select和prefetch查询集(在编辑表单上工作),看起来已经减少了一些列表显示 但是,我认为get_xxx字段也需要预取?但我不知道该怎么做Django管理员列表显示-根据自定义名称预取,django,django-admin,Django,Django Admin,我已经为我的列表显示创建了一些自定义名称,但它们在我的管理列表显示中生成了500多个查询。我添加了一个select和prefetch查询集(在编辑表单上工作),看起来已经减少了一些列表显示 但是,我认为get_xxx字段也需要预取?但我不知道该怎么做 class DeviceCircuitSubnetsAdmin(admin.ModelAdmin): search_fields = ['device__hostname','circuit__ref_no','subnet__subnet
class DeviceCircuitSubnetsAdmin(admin.ModelAdmin):
search_fields = ['device__hostname','circuit__ref_no','subnet__subnet_type__subnet_type','subnet__subnet',]
list_display = ('get_device','get_circuit','get_subnet','get_subnet_type')
def queryset(self, request):
return super(DeviceCircuitSubnetsAdmin, self).queryset(request) \
.select_related('circuit') \
.select_related('device') \
.select_related('subnet') \
.prefetch_related('device__site_') \
.prefetch_related('circuit__circuit_type') \
.prefetch_related('circuit__provider') \
.prefetch_related('subnet__subnet_type') \
def get_device(self, obj):
return obj.device.site
get_device.admin_order_field = 'device' #Allows column order sorting
get_device.short_description = 'Device' #Renames column head
def get_circuit(self, obj):
try:
return obj.circuit.ref_no
except:
return ''
get_circuit.admin_order_field = 'circuit__ref_no' #Allows column order sorting
get_circuit.short_description = 'Ref No' #Renames column head
def get_subnet(self, obj):
return obj.subnet.subnet
get_subnet.admin_order_field = 'subnet__subnet' #Allows column order sorting
get_subnet.short_description = 'Subnet' #Renames column head
def get_subnet_type(self, obj):
return obj.subnet.subnet_type
get_subnet_type.admin_order_field = 'subnet__subnet_type__subnet_type' #Allows column order sorting
get_subnet_type.short_description = 'Subnet Type' #Renames column head
有三件事,亚历克斯
get\u queryset
函数,而不是queryset
预回迁\u相关的调用中有一个输入错误,代码没有因为第1点而失败)
prefetch\u中列出的所有字段是否都与外键相关?因为您应该只在这种情况下使用预取相关
需要时,将不会有其他查询。谢谢,就是这样,我现在有8个查询,而不是1000个