Django:与sort-by相关的prefetch运行多个查询



我正在使用预取相关。当我想对预取结果进行排序时,它会再次生成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

最新更新