Tastypie apply_filters 具有独特的
Tastypie apply_filters with distinct
谁能帮帮我,我需要一个只有唯一用户的共享列表,只有最新的共享 pr。用户 (post__user)
我在 API 框架下使用 tastypie,希望有人能帮助我,我的模型布局如下所示::
class Post(models.Model):
user = models.ForeignKey(User)
....
class Share(models.Model):
post = models.ForeignKey(Post)
user = models.ForeignKey(User, blank=True, null=True)
....
我的 Tastypie 资源:: 带有我的代码示例,但给了我所有的份额,而不仅仅是一个(最新的)pr。用户..希望有人能提供帮助。
class ShareResource(ModelResource):
....
....
def apply_filters(self, request, applicable_filters):
distinct = request.GET.get('distinct', False) == 'True'
if distinct:
d = self.get_object_list(request).filter(**applicable_filters).values_list("post__user", flat=True).distinct()
return Share.objects.filter(post__user__id__in=d)
else:
return self.get_object_list(request).filter(**applicable_filters)
嗯,看起来更像是一个 ORM 问题。
d
将是一个由 applicable_filters
过滤的共享过任何内容的唯一用户列表。然后,您要查询已共享事物的用户列表中某人共享的共享对象;但此查询将 return 共享那些用户共享但不在 applicable_filters
中的对象。此外,它将 return 重复。
我想你想要这个:
class ShareResource(ModelResource):
....
....
def apply_filters(self, request, applicable_filters):
distinct = request.GET.get('distinct', False) == 'True'
if distinct:
# need to order Share objects so that the most recent one comes first
return self.get_object_list(request).filter(**applicable_filters).order_by('id', '-created').distinct('id')
else:
return self.get_object_list(request).filter(**applicable_filters)
注意,这可能只适用于 Postgres。
谁能帮帮我,我需要一个只有唯一用户的共享列表,只有最新的共享 pr。用户 (post__user)
我在 API 框架下使用 tastypie,希望有人能帮助我,我的模型布局如下所示::
class Post(models.Model):
user = models.ForeignKey(User)
....
class Share(models.Model):
post = models.ForeignKey(Post)
user = models.ForeignKey(User, blank=True, null=True)
....
我的 Tastypie 资源:: 带有我的代码示例,但给了我所有的份额,而不仅仅是一个(最新的)pr。用户..希望有人能提供帮助。
class ShareResource(ModelResource):
....
....
def apply_filters(self, request, applicable_filters):
distinct = request.GET.get('distinct', False) == 'True'
if distinct:
d = self.get_object_list(request).filter(**applicable_filters).values_list("post__user", flat=True).distinct()
return Share.objects.filter(post__user__id__in=d)
else:
return self.get_object_list(request).filter(**applicable_filters)
嗯,看起来更像是一个 ORM 问题。
d
将是一个由 applicable_filters
过滤的共享过任何内容的唯一用户列表。然后,您要查询已共享事物的用户列表中某人共享的共享对象;但此查询将 return 共享那些用户共享但不在 applicable_filters
中的对象。此外,它将 return 重复。
我想你想要这个:
class ShareResource(ModelResource):
....
....
def apply_filters(self, request, applicable_filters):
distinct = request.GET.get('distinct', False) == 'True'
if distinct:
# need to order Share objects so that the most recent one comes first
return self.get_object_list(request).filter(**applicable_filters).order_by('id', '-created').distinct('id')
else:
return self.get_object_list(request).filter(**applicable_filters)
注意,这可能只适用于 Postgres。