我试图弄清楚如何启用按计算的布尔字段排序。我看过其他一些相关的帖子,但我无法弄清楚。我试图为“文件”添加自定义管理器,但是没有用。我希望能够根据诸如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)