使用对象的方法对包含该对象的对象列表进行排序

时间:2012-03-14 18:57:38

标签: python django

我有问题。

我正在尝试生成按对象的“日期”排序的不同类型的对象列表。每个对象都有一个方法getDate,它返回排序日期。

UserProfile对象包含一个方法recent_activity,它应该返回这个已排序的对象列表。

但是,请参阅下面的第#items.append(self)行?

class UserProfile(models.Model):

    ...

    def getDate(self):
        return self.last_edited

    ...

    def recent_activity(self):

        followed = ...
        sponsored = ...
        ...

        items = []
        #items.append(self) #<-- If this is in, the call to sorted doesn't work

        for f in followed:
            if (...):
                items.append(f)
        for s in sponsored:
            if (...):
                items.append(s)
        for c in comments:
            if (...):
                items.append(c)
        for u in updates:
            if (...):
                items.append(u)
        for p in projects:
            items.append(p)

        #return items[0:7] #<-- If this is in, everything is fine!

        items = sorted(items, key=lambda item: item.getDate(),reverse=True)

        return items[0:7]

当我注释掉行items.append(self)时,编写的代码完美无缺,返回按日期排序的不同类型对象的(切片)列表(使用getDate()方法)。

然而,当包含这一行时,代码会间歇性地工作 - 我的意思是对于某些对象它可以工作(如上所述),而对于某些对象则不然(根本不是 - 实际上它通常只返回None)。 / p>

如果我在调用sorted之前返回数组,那么一切正常。所以问题与调用sorted有关。

期待听到我做错了什么!

(为了清楚起见,有人对这个问题进行了评价,我不知道为什么 - 如果你认为不清楚,请花时间发表评论,以便我可以改进这个问题!)。

修改 - 现已修复。解决方案是偶尔getDate()次调用返回datetime.date个对象而不是datetime.datetime个对象,因为数据库迁移导致我手动填充一些具有错误类型对象的字段。有点惊讶地看到没有出现异常,只是沉默失败。

1 个答案:

答案 0 :(得分:0)

使用pdb我设法找到了问题的根源。

我的数据库中有几个对象存储了datetime.date个对象,这些对象应该存储datetime.datetime个对象。这两种类型的对象之间的比较在排序过程中失败,但是无声地失败。

我不确定为什么这些排序中的比较没有产生异常 - 在我看来他们应该有。

无论如何,谢谢你的建议。