Django - Сортировать список по связанным полям - PullRequest
0 голосов
/ 06 мая 2011

Мои модели:

Item:
    name
    desc

Type:
    name

Value:
    item.ForeignKey(Item)
    type.ForeignKey(Type)
    val.CharField # varchar or numeric

Теперь у меня есть список объектов, но нет QuerySet, например: items = [<object:1>, <object:2>, <object:4>]. И t = 5 - это идентификатор строки из Type.

Я хочу отсортировать этот список по val таблицы Value, а тип значения - t. Есть идеи?

Большое спасибо!

UPDATE:
- Я добавил новое условие.

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Вы всегда можете использовать лямбда-функцию для сортировки списка элементов (при условии, что между Item и Value моделью существует отношение один к одному, в противном случае я не думаю, что вопрос имеет смысл)

 items.sort(key=lambda object: object.value_set.all()[0].val)

Хотя необходимо отметить, что сортировка будет в памяти.

Для обновленного вопроса

Простое добавление фильтра должно выполнить задачу

 items.sort(key=lambda object: object.value_set.filter(type__id=5)[0].val)
1 голос
/ 06 мая 2011

Проверка Ключевые функции в это руководство по сортировке, которое я нашел в документации по Python

1 голос
/ 06 мая 2011
sorted(items.objects.all(), key=lambda item: item.value_set.get().val if item.value_set.all() else None)

следует сделать это, если ваш внешний ключ не установлен для некоторых элементов.

...