Lösung, um die Logik in Django nicht zu teilen, um N+1 -Abfragen zu lösen

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Lösung, um die Logik in Django nicht zu teilen, um N+1 -Abfragen zu lösen

by Anonymous » 17 Jul 2025, 08:44

Hier sind einige meiner Modelle: < /p>

Code: Select all

class CustomUser(AbstractUser):
def correct_date(self, date=None):
res = self.dates.order_by("date").all()
if not len(res):
return None
return res[len(res) - 1]

class Date(models.Model):
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name="dates")
date = models.DateField(auto_now_add=True)
Um N+1-Abfragen zu beheben Ich muss den Order_by in der Ansicht mit einem Vorab-Vorab :
extrahieren

Code: Select all

queryset = Project.objects.prefetch_related(
Prefetch(
"user__dates",
queryset=Date.objects.order_by('date')
),
)

und entfernen Sie die order_by in meiner Methode correct_date . Aber der Order_by befindet sich in einer anderen Datei. Dies könnte zu Problemen für diejenigen, die den Code danach verwenden. Correy_date Methode Wenn sie zuvor mit einem Order_by aufgerufen wurde, und einen Fehler werfen oder order_by anwenden, wenn es nicht

Top