[英]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.