Сортировка полей модели в наборе - PullRequest
1 голос
/ 31 января 2012

Я использую этот фрагмент django , который экспортирует данные в csv-файл от администратора.У него есть две строки, которые получают имена полей из модели.

    opts = modeladmin.model._meta
    field_names = set([field.name for field in opts.fields])

Однако эти имена полей не в порядке.Есть ли способ сортировки по порядку объявления в их модели?Если нет, заказать набор по алфавиту?

1 Ответ

2 голосов
/ 31 января 2012

Краткий ответ: Нет. Набор удалит любой порядок.

Если вы хотите упорядочить в алфавитном порядке, преобразуйте его в список и вызовите sort () для него.

field_names = list(field_names)
field_names.sort()

Вы можете проверить несколько других стековых ответов нареализовать упорядоченный набор, который будет работать с остальным кодом (set & set):

Есть ли в Python упорядоченный набор?


Или заменитькод, который использует наборы с теми, которые используют списки:

field_names = [field.name for field in opts.fields]
if fields:
    field_names = filter(lambda field: field in fields, field_names)
elif exclude:
    field_names = filter(lambda field: field not in exclude, field_names)   

Я не понимаю, почему модель будет иметь несколько полей с одинаковыми именами, и я не вижу какого-либо значительного прироста производительности от использованиянабор для набора из 10 элементов для периодического действия администратора, так что вы можете удалить их.

...