sys.argv
как отдельные именованные переменные. Если какая-то не задана - то переменная будет иметь None
. Тогда на длину массива аргументов проверять не надо. Код станет гораздо более читабельным. updated_time
.class Project(models.Model):
def last_event(self):
event_objects = filter(bool, [
self.characteristics.order_by('-updated_time').first(),
...
])
if event_objects:
return sorted(event_objects, key=operator.attrgetter('updated_time'), reverse=True)[0]
{% with event=project.last_event %}
{{ event }} <small>{{ event.updated_time }}</small>
{% endwith %}
Meta
. p.project_created
в последнюю очередь, если ни comments, ни reviewed результата не дали. Покажите как у вас будет выглядеть order_by
. filter()
именно затем, чтоб такие проекты прятались, иначе сортировка падает. Вам нужно убрать filter
и добавить новое условие в order_by
. Вы ведь уже добавили условие для reviewed. У вас почему-то order_by
переписана полностью. Пусть она возвращает p.created_time
, если все остальные значения None
. def order_by(p):
commented = max(
p.characteristics_commented,
p.tasks_commented
) if (
p.characteristics_commented and p.tasks_commented
) else p.characteristics_commented or p.tasks_commented
if commented is not None:
return commented
reviewed = ... # вычисляется по аналогии
projects_annotated = list(filter(
lambda p: p.characteristics_commented or p.tasks_commented or p.characteristics_revised or p.tasks_revised,
Project.objects.annotate(
characteristics_commented=Max('characteristics__comments__created'),
tasks_commented=Max('tasks__comments__created'),
characteristics_revised=Max('characteristics__revision_date'),
tasks_revised=Max('tasks__revision_date')
)
))
projects_sorted = list(sorted(
projects_annotated,
key=order_by,
reverse=True
))
project_id
в инстанс класса Project
.projects_annotated = list(Project.objects.annotate(
latest_comment_characteristics=Max('characteristics__comments__created'),
latest_comment_tasks=Max('tasks__comments__created'),
))
projects_sorted = list(sorted(
projects_annotated,
key=lambda project: max(
project.latest_comment_characteristics,
project.latest_comment_tasks
) if (
project.latest_comment_characteristics and project.latest_comment_tasks
) else project.latest_comment_characteristics or project.latest_comment_tasks,
reverse=True
))
.annotate()
может дать None
, если комментариев нет.projects
в шаблон и вывести. TestSerializer
. Мне пока непонятно, в чём проблема. /var/log/messages
упоминания про oom
(oom-killer, сервис, который убивает процессы по ошибке out of memory).