В модели Django UserProfile я пытаюсь сделать следующее:
class UserProfile(models.Model):
...
def recent_activity(self):
followed_users = Followed.objects.filter(user=self.id).order_by("-when")
...
items = [self]
for f in followed_users:
items.append(f)
...
sorted(items,key=lambda item: item.getDate)
return items[:7]
Код должен возвращать "недавнюю активность" пользователя, объединяя множество различных действий, которые он может выполнить, а затем сортируя их по дате.
В каждой модели реализован метод "getDate", который возвращает дату для сортировки.
код:
- Получает QuerySet пользователей, за которыми «следил» пользователь (я использую таблицу с именем Followed, чтобы сохранить тот факт, что пользователь x следует за пользователем y).
- Создает список, содержащий рассматриваемый объект UserProfile.
- Добавить каждый объект Followed в список.
- Сортировка списка по дате последнего редактирования.
- Вернуть самые последние n предметов (7 в приведенном выше).
Я думал, что это был аккуратный способ его реализации. Но независимо от того, что я делаю, Python, похоже, отказывается правильно сортировать этот список. Кажется, он правильно сортирует каждый тип недавних действий, за исключением UserProfile, который, кажется, остается там, где я изначально поместил его в этот список после вызова sorted
. Это ни в коем случае не дает сбой, просто не возвращает правильно отсортированный список!
Я, вероятно, пропустил что-то простое ... но я бы ожидал, что либо Python пожалуется на то, что метод объекта не может отсортировать список, содержащий сам объект, либо ИЛИ для правильной сортировки списка. Я был немного удивлен, что это не так.
Может кто-нибудь сказать мне, где я сбился с пути?
Спасибо.