Django 2.x过滤器并对计算的布尔字段进行排序

时间:2019-12-10 13:33:01

标签: django

我试图弄清楚如何启用按计算的布尔字段排序。我看过其他一些相关的帖子,但我无法弄清楚。我试图为“文件”添加自定义管理器,但是没有用。我希望能够根据诸如exists之类的计算字段对值进行排序和过滤。

class File(models.Model):
    archive = models.ForeignKey("Archive", on_delete=models.CASCADE)
    file_name = models.CharField(max_length=2000, unique=False, validators=[validate_is_file])
    comment = RichTextField()
    title = models.CharField(max_length=2000, default='')

    def __str__(self):
        return basename(self.file_name)

    def save(self, *args, **kwargs):
        self.title = basename(self.file_name)
        super(File, self).save(*args, **kwargs)

    def preview(self):
        return bs4(self.comment).get_text()

    def exists(self):
        return isfile(self.file_name)
    exists.boolean = True

    def size(self):
        return getsize(self.file_name)

    def created(self):
        return convert_ctime(time.ctime(getctime(self.file_name)))

    def modified(self):
        return convert_ctime(time.ctime(getmtime(self.file_name)))



class FileAdmin(admin.ModelAdmin):
    readonly_fields = ['file_name', 'archive']
    formfield_overrides = {
        models.CharField: {'widget': TextInput(attrs={'style': 'width: 90%;'})},
        }

    fieldsets = [
        (None, {'fields': ['title', 'comment', 'file_name', 'archive']})
        ] 
    list_display = ['exists', 'file_name', 'size', 'created', 'modified', 'title', 'preview',]
    search_fields = ['title', 'file_name', 'comment', 'created', 'modified']
    list_filter = ['exists']  # This does not work


admin.site.register(Archive, ArchiveAdmin)
admin.site.register(File, FileAdmin)

0 个答案:

没有答案