尝试过滤表单查询集时遇到一些可怕的性能问题。
我正在尝试过滤已经存在关系的模型。
代码成功。
但是我的查询集未排序。
当我更改为form.base_fields['sharepoint_mandate'].queryset = Sharepoint_Mandate.objects.filter(mandate_mapping_2__isnull=True).order_by('product_name')
时,查询现在需要25秒
请帮助
models.py
class Mandate_Mapping_2(Trackable):
mandate_mapping_id = models.AutoField(primary_key=True)
sharepoint_mandate = models.ForeignKey(Sharepoint_Mandate, on_delete=models.CASCADE)
sharepoint_product = models.ForeignKey(Sharepoint_Product, on_delete=models.CASCADE)
admin.py
@admin.register(Mandate_Mapping_2)
class ChampMandateMapping2Admin(admin.ModelAdmin):
list_display = ['sharepoint_mandate', 'sharepoint_product', 'approved']
def get_form(self, request, obj=None, **kwargs):
form = super(ChampMandateMapping2Admin, self).get_form(request, obj, **kwargs)
if 'change' in kwargs:
if not kwargs['change']:
form.base_fields['sharepoint_mandate'].queryset = Sharepoint_Mandate.objects.filter(mandate_mapping_2__isnull=True)
return form
def get_queryset(self, request):
return super().get_queryset(request).select_related(
'sharepoint_product',
'sharepoint_mandate',
)
答案 0 :(得分:0)
当检查是否存在用于Sharepoint_Mandate的Mandate_Mapping_2时,您将进行额外的查询,一无所有。您可以使用列名属性。
Sharepoint_Mandate.objects.filter(mandate_mapping_2_id=None).order_by('product_name')
中的“直接使用外键值” 部分