1402/02/30

بهبود عملکرد جنگو ادمین با تابع list_select_related

#جنگو #روابط #Model

با مقداردهی list_select_related داخل کلاس ادمین به جنگو می‌فهمانیم زمانی که SQL JOIN را اجرا می‌کند، خروجی نتایج رابطه برای هر نمونه اصلی، در یک کوئری واحد پایگاه‌داده قرار گیرد. این تغییر موجب کاهش کوئری به پایگاه‌داده می‌شود.

در مثال زیر مقدار list_select_related = ['collection'] داخل کلاس ProductAdmin نوشته شده است که موجب می‌شود موقع دریافت مجموعه محصول به صورت مجزا به پایگاه‌داده درخواست ارسال نشود.

به نمونه کد زیر دقت کنید:

@admin.register(models.Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ['title', 'price', 'inventory_status', 'collection_title']
    list_select_related = ['collection']
    
    def collection_title(self, product):
        return product.collection.title

علی مهدوی

علی مهدوی برنامه نویس ارشد وب

0