我有问题。
我正在尝试生成按对象的“日期”排序的不同类型的对象列表。每个对象都有一个方法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
个对象,因为数据库迁移导致我手动填充一些具有错误类型对象的字段。有点惊讶地看到没有出现异常,只是沉默失败。
答案 0 :(得分:0)
使用pdb我设法找到了问题的根源。
我的数据库中有几个对象存储了datetime.date
个对象,这些对象应该存储datetime.datetime
个对象。这两种类型的对象之间的比较在排序过程中失败,但是无声地失败。
我不确定为什么这些排序中的比较没有产生异常 - 在我看来他们应该有。
无论如何,谢谢你的建议。