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).