【发布时间】:2014-07-24 17:11:29
【问题描述】:
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 中做到这一点?
【问题讨论】:
-
那么你想要的是创建一个获取远程 URL 并将其保存为 ImageField 的字段,对吧?
-
是什么让你认为 Django 对这个任务做了任何花哨的事情(提示:不是)?
image只是一个名称,它首先引用models.ImageField()创建的对象,然后引用ContentFile创建的对象。就是这样。 -
@chepner 那么
ContentFile是如何存储在数据库中的呢?虽然我需要一个ImageField实例。 -
我不确定,但即使您没有将任一命令的结果分配给
image,它也可能会起作用。我的猜测是 Django 维护了一些使用的隐藏引用。
标签: python django inheritance python-3.x django-models