Django' ImageField
允许我使用正常分配在其中存储文件对象。
from urllib import request
from django.db import models
from django.core.files.base import ContentFile
class Customer(models.Model):
logo = models.ImageField()
customer.logo = ContentFile(request.urlopen(url), 'image.png')
现在我想从ImageField
继承自定义字段类型。它将URL作为普通字符串而不是文件对象进行分配。在内部,它应该获取图像并将其分配给它的基类,就像上面的手动示例一样。
from django.db import models
class UrlImageField(models.ImageField):
def __set__(self, instance, value):
super() = ContentFile(urllib.request.urlopen(value), 'image.png')
因此,我需要在ImageField
基类上调用赋值运算符。我怎么能用Python做到这一点?
答案 0 :(得分:2)
赋值运算符不能重载。
答案 1 :(得分:1)
您不希望(和不能)重载分配,但您只想扩展ImageField
描述符。
描述符在Descriptor HowTo Guide中进行了深入解释。您还应该看一下:Understanding __get__ and __set__ and Python descriptors
要点是他们定义了控制属性访问的__set__
和__get__
方法。这些方法只是常规方法,因此您必须完全按照常规方法扩展它们:
from django.db import models
class UrlImageField(models.ImageField):
def __set__(self, instance, value):
super().__set__(instance, ContentFile(urllib.request.urlopen(value), 'image.png'))