• 10-06-2020, 18:06:20
    #1
    Merhabalar arkadaşlar, django ve django rest framework ile uğraşıyorum serializers views vs yazdım şu an sorguları azaltmak için prefetch_related ve select_related kullanmaya çalışıyorum
    ModelA'da 5 adet ForeignKey (Many-to-One) alanı var
    query set'e aşşağıdaki kodu yazıyorum fakat sorgu sayısında herhangi bir değişiklik olmuyor
    (sadece modelB yazmamın sebebi deneme yapmamdan dolayı chain select_related kullanacağım çözebilirsem)
    ModelA.objects.all().select_related('ModelB')
    ModelA da 5 adet ForeignKey yanında 1 adet te Many-To-Many ilişkisi var
    ModelB, ModelC, ModelD, ModelE, ModelF -> ForeignKey ile ilişkilendirilen modeller
    ModelG ise Many-To-Many ile ilişkilendirilen model

    Serializers metodum da 2 alan var şu anlık deneme olarak 1 kendi alanı 1 foreignKey alanı, sorgu sayısı şu an 2 bu sayıyı 1 e düşürmeye çalışıyorum 1 e düşürünce diğer fieldları da ekleyeceğim
  • 10-06-2020, 18:43:59
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    select_related() argümanları da aslında field name olarak geçer. Eğer değilse, hata verecektir. Yani ModelA bir field name ama siz class name olarak kullanmışsınız. Tam olarak hangi kodu çalıştırdınız ve hangi sorguları ürettiniz? Hata yok ise, select_related () çalışmalı ve sorguda JOIN'ler olmalıdır.
  • 11-06-2020, 07:14:53
    #3
    AndyCap adlı üyeden alıntı: mesajı görüntüle
    select_related() argümanları da aslında field name olarak geçer. Eğer değilse, hata verecektir. Yani ModelA bir field name ama siz class name olarak kullanmışsınız. Tam olarak hangi kodu çalıştırdınız ve hangi sorguları ürettiniz? Hata yok ise, select_related () çalışmalı ve sorguda JOIN'ler olmalıdır.
    sorunu hallettim (select_related için ) ufak bir mantık hatasından meydana geliyormuş. Many-To-Many alanım için prefetch_related kullandığımda 1 adet ekstra sorgu geliyordu bunun da nedeni herhangi bir çakışma olmadığından emin olmak için yapıyormuş şu an düzgün şekilde çalışıyor