你如何让Django的文件管理器应用程序列出列表顶部的新文件?

时间:2014-06-19 12:57:11

标签: python django file upload

我们正在使用django filer应用程序(版本0.9.5,http://django-filer.readthedocs.org/en/latest/index.html)来管理我们的文件上传。工作非常好,但是当你上传新文件时,它们总是出现在列表的底部,因此我们不可避免地要通过大量文件列表一直滚动到底部以查找我们刚刚上传的内容。我们希望新上传的文件显示在顶部。

我已将文件管理器移至我们的应用目录,因此可以对其进行修改。到目前为止,我尝试更改排序(/admin/folderadmin.py的第313行)。更改order by子句以使用" -modified_at"打破订购功能。现在我正在考虑更改文件模型的save方法(在/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)

这里的想法是将最近上传的项目分配给当前文件夹中最顶层项目之前的订单,以使其首先出现在列表中。不幸的是,保存的使用方式比我所知的要多,而且目前还没有用。关于我们如何做这样的事情的任何想法?

1 个答案:

答案 0 :(得分:-1)

我相信我找到了一个适用于此的解决方案。在/admin/folderadmin.py的第313行是以下行:

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:

当提交新索引时,文件管理器不知道目录的全部内容是故意颠倒的,所以除非我们反转这个列表,否则每次我们移动时都会翻转目录的全部内容。反转索引列表可以适应我们为显示顺序所做的更改。

认为这涵盖了它,但如果有人知道任何无意中打破其他事情的情况,请发表评论。