代码之家  ›  专栏  ›  技术社区  ›  fish2000

Django ImageFileField的子类化

  •  1
  • fish2000  · 技术社区  · 14 年前

    我有兴趣对Django的ImageFileField进行子类化,以允许访问Image IPTC元数据,比如:

    >>> from myapp.models import SomeModel
    >>> obj = SomeModel.objects.all()[0] # or what have you
    >>> obj.image.iptc['keywords']
    ('keyword','anotherkeyword','etc')
    

    …这个 docs say read over django's internal code 这是我做的;我试图生成一个有效的实现,我不确定我在做什么——我以前定义过自定义字段,但是我不能为基于文件的字段提供样板设置。

    我知道我需要定义一个 attr_class 和A descriptor_class 让它发挥作用。有没有人有一个简单的例子或建议,我可以从中开始?

    2 回复  |  直到 13 年前
        1
  •  6
  •   Valentin Golev    14 年前

    你的问题不清楚:你试过这样的方法吗?

    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 ?

        2
  •  1
  •   fish2000    13 年前

    最新消息:我已经知道了这一点——部分要感谢@valya提供的答案。在Django ImageKit的“我的叉子”中可以找到成功实现的示例:

    https://github.com/fish2000/django-imagekit/blob/icc-develop/imagekit/modelfields.py