Как заставить приложение filer Django выводить новые файлы в начало списка?

#python #django #file #upload

#python #django #файл #загрузка

Вопрос:

Мы используем приложение django filer (версия 0.9.5, http://django-filer.readthedocs.org/en/latest/index.html ) для управления загрузкой наших файлов. Работает очень хорошо, но когда вы загружаете новые файлы, они всегда появляются внизу списка, поэтому нам неизбежно приходится прокручивать весь путь до конца через огромные списки файлов, чтобы найти то, что мы только что загрузили. Вместо этого мы хотели бы, чтобы недавно загруженные файлы отображались вверху.

Я переместил filer в наш каталог приложений, чтобы его можно было изменить. До сих пор я пытался изменить порядок (строка 313 из /admin/folderadmin.py ). Изменение предложения order by на использование «-modified_at» нарушает функциональность упорядочения. Теперь я рассматриваю возможность изменения метода сохранения файловой модели (в /models/filemodels.py ), чтобы включить что-то вроде следующего:

 ...
if not self.id:
    try:
        folder = self.folder if self.folder else None
        order_first = self.__class__.objects.filter(folder=folder).aggregate(
            models.Min('order'))['order__min'] - 1
        if order_first <= 1:
            self.__class__.objects.filter(folder=folder).update(
                order=models.F('order')   1000)
                self.order = 1000   order_first
            else:
                self.order = order_first
        except (TypeError, IndexError):
            pass
    super(File, self).save(*args, **kwargs)
  

Идея здесь состоит в том, чтобы назначить самому последнему загруженному элементу порядок, предшествующий самому верхнему элементу в текущей папке, чтобы он отображался первым в списке. К сожалению, save используется большим количеством способов, чем я знаю, и в настоящее время это не работает. Есть идеи о том, как мы могли бы сделать что-то подобное?

Ответ №1:

Я полагаю, что нашел решение, которое работает для этого. В строке 313 из /admin/folderadmin.py это следующая строка:

 file_qs = file_qs.order_by('order')
  

Измените это на:

 file_qs = file_qs.order_by('-order')
  

Это меняет порядок отображения, так что новые элементы появляются первыми в списке. К сожалению, само по себе это также нарушает возможность сортировки. У нас есть фотогалереи, где файлы должны отображаться в определенном порядке, поэтому сортировка важна. Чтобы исправить это, нам также необходимо внести изменения в представление сортировки в /filer/views.py путем замены

 for pk in request.POST.getlist('indexes'): 
  

с помощью

 index_list = request.POST.getlist('indexes')
index_list.reverse()
for pk in index_list:
  

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

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

Комментарии:

1. Изменение источника файла (как и для любого стороннего источника) на самом деле совсем не нормально. Вы теряете возможность легко обновлять код. НИЧЕГО ХОРОШЕГО.