如何轻松地向ImageFieldFile对象添加自定义属性或方法?
例如我有这个模型:
class SomeModelWithImage(models.Model):
image = models.ImageField()
和一个班级:
class Custom(object):
def __repr__(self):
return "<Custom object>"
我想以某种方式覆盖ImageFieldFile对象,因此它将有一个返回我的Custom对象的计算方法,如:
>> from models import SomeModelWithImage
>> i = SomeModelWithImage.objects.all()[0]
>> i.image
<ImageFieldFile: /path/to/file>
>> i.image.custom_text
<Custom object>
UPD。我更改了一些对象名称,使问题抽象化并且不会让您感到困惑
答案 0 :(得分:0)
在Django中,一个模型字段始终对应于一个数据库列,因此您无法实现所需。此外,您的类名应始终是单数,因为“Image”类的对象应该只是一个单独的图像。我想你可能想要更像以下内容:
class ImageSet(models.Model):
images = models.ManyToManyField('Image')
class Image(models.Model):
image_file = models.ImageField()
custom_text = models.CharField(max_length=255)
修改强>
如果你想要一个不需要额外数据库信息的计算字段/方法,只需要子类models.ImageField:
class MyImageField(models.ImageField):
my_class_attr = "BLARG"
def my_method(self):
print self.my_class_attr