Существуют ли "N + 1 проблемы" в "formfield_for_foreignkey()"? (Django)
Я переопределил formfield_for_foreignkey() для отображения комбинированного текста "foreign key value" и "its parent value" в Django Admin как показано ниже:
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
formfield = super().formfield_for_foreignkey(db_field, request, **kwargs)
if db_field.name == "my_field":
formfield.label_from_instance = lambda obj: f'{obj} ({obj.my_parent})'
return formfield
Затем, используя "print()", я проверил, сколько раз вызывается "formfield_for_foreignkey()" и "if block" в "formfield_for_foreignkey()", как показано ниже, при открытии страницы:
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
formfield = super().formfield_for_foreignkey(db_field, request, **kwargs)
print("formfield_for_foreignkey") # Called "18 times"
if db_field.name == "my_field":
print("if block") # Called "9 times"
formfield.label_from_instance = lambda obj: f'{obj} ({obj.my_parent})'
return formfield
В результате print("formfield_for_foreignkey") вызывается 18 раз что означает "formfield_for_foreignkey()" вызывается 18 раз.
И, print("if block") вызывается 9 раз что означает "if block" в "formfield_for_foreignkey()" вызывается 9 раз.
Мои вопросы:
Является ли "N + 1 проблемой" тем, что:
- "formfield_for_foreignkey()" сам вызывается 18 раз?
- "if block" сам вызывается 9 раз?
- "{obj}" в "if block" вызывается 9 раз?
- "{obj.my_parent}" в "if block" вызывается 9 раз?