按通用关系排序?

时间:2014-10-24 17:53:37

标签: python django django-1.7

我有两个模型Post和Comment。两者都可以通过额外的评级应用程序获得一个点。 Point与任何必要的对象和值具有通用关系。

现在我使用以下方法创建了一个Post和Comment对象列表:

result_list = sorted(chain(post_list, comment_list),key=attrgetter('pub_date',))

最大的问题是:如何按指定的点而不是pub_date进行排序?

我正在寻找一个不修改Post,Comment或Point的解决方案,因为Point是一个额外的应用程序,我希望所有这些解决方案彼此独立工作。虽然有第三个应用程序组合它们,所以我可以有一个新的视图来完成这个伎俩。但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

下面的内容应该可以解决问题:

result_list = sorted(
    chain(post_list, comment_list),
    key=lambda x: sum(
        [
            point.value for point in Point.objects.filter(
                point_for_id=x.id, 
                point_for_class=ContentType.objects.get_for_model(x)
        ],
        0
    )
 )

但是我可以建议您编写和修改积分应用,related_query_name会使这更加简单。