У меня проблема.
Я пытаюсь сгенерировать список объектов разных типов, отсортированных по «дате» объекта.У каждого объекта есть метод 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).
Если я верну массив ДО вызова sorted
, снова все будет работать нормально.Так что проблема связана с звонком на sorted
.
Будем рады услышать, что я делаю неправильно!
(Просто чтобы быть ясно, кто-то занизил этот вопрос, я понятия не имею, почему - если вы считаете, что это неясно, пожалуйста,найдите время, чтобы прокомментировать, чтобы я мог улучшить вопрос!).
Редактировать - Исправлено.Решением были случайные getDate()
вызовы, возвращающие datetime.date
объекты, а не datetime.datetime
объекты из-за миграции базы данных, что заставляло меня вручную заполнять некоторые поля неправильным типом объекта.Немного удивлен, что не появляется никаких исключений, просто молчание не сработало.