子类化Django的ImageFileField
我想要对Django中的ImageFileField进行子类化,这样我就能访问图片的IPTC元数据,类似于下面这样:
>>> from myapp.models import SomeModel
>>> obj = SomeModel.objects.all()[0] # or what have you
>>> obj.image.iptc['keywords']
('keyword','anotherkeyword','etc')
... 文档中提到要查看Django的内部代码,我也看了;我尝试过制作一个可以工作的实现,但我不太确定自己在做什么——我之前定义过自定义字段,但对于基于文件的字段,我找不到合适的基础设置。
我知道我需要定义一个attr_class
和一个descriptor_class
来让它工作。有没有人能给我一个简单的例子或者建议,让我可以开始呢?
2 个回答
1
更新:我已经搞定这个问题了,部分要感谢@valya提供的回答。你可以在我修改的django-imagekit中找到一个成功的实现示例:
https://github.com/fish2000/django-imagekit/blob/icc-develop/imagekit/modelfields.py
6
你的问题不太清楚:你有没有尝试过类似这样的做法呢?
class ImageMetadataMixin(object):
"""Mixin can be added to any image file"""
@property
def iptc(self):
"""Or something like this"""
class ImageWithMetadataFieldFile(ImageMetadataMixin, ImageFieldFile):
pass
class ImageWithMetadataField(ImageField):
attr_class = ImageWithMetadataFieldFile
我觉得这已经足够了。你为什么觉得需要重新定义 descriptor_class
呢?