有人可以帮助我,我需要一个只有唯一用户的共享列表,只有最新的份额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)
答案 0 :(得分:1)
d
将是一个由applicable_filters
过滤的完全共享内容的唯一身份用户列表。然后,您将查询已共享内容的用户列表中的某人共享的共享对象;但是此查询将返回这些用户已共享但不在applicable_filters
中的共享对象。此外,它将返回重复项。
我想你想要这个:
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。