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。