2015-07-16 21 views
5

(Django 1.8) Diğer tablolarla çok fazla çok ilişkisi olan bir tablom var. Bu tablolardan iki tanesi çok fazla girdiye sahiptir ve bu, yönetici sayfalarının çok yavaş yüklenmesine neden oluyor çünkü listelerdeki tüm girdileri yüklemeye çalışıyor. Yönetici sayfa yükünü hızlandırmak için büyük tabloların tüm girişlerini yüklemek için dahili yönetici sayfası sorgusundan kaçınmanın bir yolu var mı? Bence en iyi yol sadece seçilen değerleri listelemek ama nasıl emin değilim.Django - Çok - Çok - İlişki ilişkisi sayfası çok yavaş

Burada limit_choices_to nasıl kullanılacağını emin değilim:

class Data(models.Model): 
    pass # stuff here 

class Report(models.Model): 
    data= models.ManyToManyField(Data) 

Ben de admin.py bu ekleme çalıştı ama hiç yardım etmedi. Bu nedense sınırlayıcı değil:

def queryset(self, request): 
    qs = super(MyModelAdmin, self).queryset(request) 
    if len(qs) > 10: 
     qs = qs[:10] 
    return qs 

cevap

7

Hala daha sonra docs bakınız, limit_choices_to kullanmak istiyorsanız. Temel olarak filtreleri bir sözlük nesnesinde sağladınız.

Yöneticiyi hızlandırmak için önerilerim şunlardır:
1. ModelAdmin'inizde raw_id_fields'u kullanın. Bu, bir selectbox yerine küçük bir arama kutusu sağlar ve ilgili tüm nesneleri listelemenin önüne geçer.
2. ForeignKey ilişkilerini ileride kullanıyorsanız, ModelAdmin'inizde list_select_related'u da kullanabilirsiniz. Sizin durumunuzda, çoktan çoğa ilişkileri ele alıyorsunuz, bu nedenle ModelAdmin'in get_queryset yöntemini geçersiz kılmayı deneyebilir ve aşağıdaki kodda olduğu gibi prefetch_related kullanabilirsiniz.

from django.contrib import admin 

class TestModelAdmin(admin.ModelAdmin): 
    def get_queryset(self, request): 
     test_model_qs = super(TestModelAdmin, self).get_queryset(request) 
     test_model_qs = test_model_qs.prefetch_related('many-to-many-field') 
     return test_model_qs 

gerçekten ellerini kirletme istiyorsanız

, ben son derece django-debug-toolbar kullanmanızı öneririz. Gerçekten kaç SQL ifadesinin çalıştırıldığına dair size görünürlük sağlar. SQL okuyabiliyorsanız, select_related ve prefetch_related için girmeniz gerekenleri çıkartabilirsiniz.

+0

raw_id_fields ihtiyaç duyduğum şeydir. Teşekkürler. – max