簡體   English   中英

Django:與排序相關的預取運行多個查詢

[英]Django: prefetch related with sort by runs multiple queries

我正在使用 prefetch_related。 當我想對預取結果進行排序時,它會再次生成 sql,

class UserActivity(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        related_name= 'user_logging_details',
        on_delete=models.CASCADE
    )
    ip_addess = models.CharField(max_length=40)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


users = User.objects.prefetch_related('user_logging_details').all()

for user in users:
    users_activity = user.user_logging_details.all()
    # this does not generate any sql

    ## VS ##

    users_activity = user.user_logging_details.all().sort_by('ip_addess')
    # this generates many sqls and defeats the purpose of prefetch related

如何對預取結果進行排序。

這樣做的正確方法是什么。

您可以使用Prefetch

prefetch = Prefetch('user_logging_details', queryset= UserActivity.objects.all().order_by('ip_address'))
users = User.objects.prefetch_related(prefetch).all()


for user in users:
    users_activity = user.user_logging_details.all()
    # it should return user activities ordered by ip address

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM