在 django-filer 的文件模型中使用属性而不是字段的基本原理是什么
What's the rationale of using properties instead of fields within the File model of django-filer
我尝试对扩展字段进行过滤,实际上它根本不是一个字段,如下例所示。为了这个例子,假设我们有一个安装了 django-filer 的 运行 Django 并且已经上传了一些文件。
>>> from filer.models import File
>>> File.objects.all()[0].extension
'some_ext' # just as example
但是在尝试过滤时:
>>> File.objects.filter(extension='pdf')
django.core.exceptions.FieldError: Cannot resolve keyword 'extension'
into field. Choices are: _file_size, clipboarditem, description,
downloadfilemodel, file, filer_image_file, folder, folder_id,
has_all_mandatory_data, id, in_clipboards, is_public, modified_at,
name, news_attachment, original_filename, owner, owner_id,
polymorphic_ctype, polymorphic_ctype_id, sha1, uploaded_at
这是因为扩展没有与模型一起存储,实际上是计算属性。
我的问题:不将此元数据存储在文件模型中的理由是什么。
更新:我不抱怨实施。请问实现的可能动机。
扩展名不是非常重要的元数据,因为我们存储的是文件名。如果您查看 source code:
@property
def extension(self):
filetype = os.path.splitext(self.file.name)[1].lower()
if len(filetype) > 0:
filetype = filetype[1:]
return filetype
您可以看到存储扩展意味着我们正在复制已有的数据。因此决定将其设为 属性.
我尝试对扩展字段进行过滤,实际上它根本不是一个字段,如下例所示。为了这个例子,假设我们有一个安装了 django-filer 的 运行 Django 并且已经上传了一些文件。
>>> from filer.models import File
>>> File.objects.all()[0].extension
'some_ext' # just as example
但是在尝试过滤时:
>>> File.objects.filter(extension='pdf')
django.core.exceptions.FieldError: Cannot resolve keyword 'extension'
into field. Choices are: _file_size, clipboarditem, description,
downloadfilemodel, file, filer_image_file, folder, folder_id,
has_all_mandatory_data, id, in_clipboards, is_public, modified_at,
name, news_attachment, original_filename, owner, owner_id,
polymorphic_ctype, polymorphic_ctype_id, sha1, uploaded_at
这是因为扩展没有与模型一起存储,实际上是计算属性。
我的问题:不将此元数据存储在文件模型中的理由是什么。
更新:我不抱怨实施。请问实现的可能动机。
扩展名不是非常重要的元数据,因为我们存储的是文件名。如果您查看 source code:
@property
def extension(self):
filetype = os.path.splitext(self.file.name)[1].lower()
if len(filetype) > 0:
filetype = filetype[1:]
return filetype
您可以看到存储扩展意味着我们正在复制已有的数据。因此决定将其设为 属性.