Django - общие отношения в админке django - есть ли способ предварительно получить данные, вместо того, чтобы делать запрос к базе данных для каждого поля в каждой строке и столбце?

У меня есть следующие модели (все упрощено):

class Car(models.Model):
    field_int = models.IntegerField(_('field_int'), null=True)
    field_datetime= models.DateTimeField(_('field_datetime'))
    field_boolean = models.BooleanField(_('field_boolean'), default=False)

class Bus(models.Model):
    field_int = models.IntegerField(_('field_int'), null=False)
    field_datetime= models.DateTimeField(_('field_datetime'))
    field_boolean = models.BooleanField(_('field_boolean'), default=True)

и у меня есть что-то вроде vehicle report model с общим отношением, чтобы я мог "объединить/слить" и показать данные обеих моделей одновременно в панели администратора django list_display

class VehiclesReport(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

    class Meta:
        indexes = [
            models.Index(fields=["content_type", "object_id"]),
        ]

    def field_int_generic(self):
        return self.content_object.field_int

    def field_datetime_generic(self):
        return self.content_object.field_datetime

    def field_boolean_generic(self):
        return self.content_object.field_boolean 

Я создаю объекты в скрипте следующим образом (это пример для класса Car, но то же самое для класса Bus):

 VehiclesReport.objects.create(
        content_type=ContentType.objects.get_for_model(Car),
        object_id=car.object_id,
    )

И со всеми этими моделями и данными я создал панель администратора, чтобы я мог отображать все одновременно:

class VehiclesReportAdmin(ModelAdmin):
    list_display = (
        'field_int_generic',
        'field_datetime_generic',
        'field_boolean_generic',
    )
    ordering = ('content_type',)


admin_site.register(VehiclesReport, VehiclesReportAdmin)

Все работает как шарм, но django вместо предварительной выборки всех данных, он делает запрос для каждого field_int_generic, field_datetime_generic, field_boolean_generic выполнения, даже если это все тот же "ряд".

Допустим, у меня есть 'VehiclesReportAdmin', но с 10 колонками, как field_int_generic и ограничением в 20 страниц... У меня есть 200 запросов к базе данных всего для 20 строк данных. Вместо одного большого префетча или 18 запросов для каждой строки, и все это обрабатывается django автоматически

Есть ли какой-нибудь способ или метод, который я могу переопределить, чтобы сделать его более оптимизированным?

Буду благодарен за любую помощь!

Вернуться на верх