Django继承-访问子类字段
我有以下Django型号:Django继承-访问子类字段,django,inheritance,Django,Inheritance,我有以下Django型号: class Image(TimeStamp): hash = models.CharField(max_length=33, unique=True, editable=False) filesize = models.PositiveIntegerField(blank=True,
class Image(TimeStamp):
hash = models.CharField(max_length=33,
unique=True,
editable=False)
filesize = models.PositiveIntegerField(blank=True,
null=True,
editable=False)
class Image1(Image):
image = models.ImageField(upload_to='image1/')
class Image2(Image):
image = models.ImageField(upload_to='image2/')
我希望能够在创建图像时自动计算文件大小和散列,在我看来,最合理的位置是在一个超类中。但是,为了计算哈希和文件大小,我需要能够从超类访问子类image字段。有没有办法做到这一点
我将这个保存方法添加到超类中,但它当然不知道图像:
def save(self, *args, **kwargs):
super(Image, self).save(*args, **kwargs)
self.hash = hashlib.md5(self.image.read()).hexdigest()
self.filesize = self.image.size
这就是我最终解决这个问题的方法。感谢所有人的反馈,请让我知道此代码是否可以进一步改进:
def get_image_directory(instance, filename):
return os.path.join(instance.upload_to, filename)
class Image(TimeStamp):
hash = models.CharField(max_length=33,
unique=True,
editable=False)
file_size = models.PositiveIntegerField(blank=True,
null=True,
editable=False)
image = models.ImageField(upload_to=get_image_directory)
def __str__(self):
return self.image.url.split('?')[0]
def save(self, *args, **kwargs):
self.hash = hashlib.md5(self.image.read()).hexdigest()
self.file_size = self.image.size
super(Image, self).save(*args, **kwargs)
class Meta:
abstract = True
class Image1(Image):
upload_to = 'image1/'
class Image2(Image):
upload_to = 'image2/'
您是否尝试在父对象中创建图像字段?然后您只需覆盖每个子项中的上载到。这些模型之间的唯一区别是上载到位置吗?如果是这样的话,您应该只使用一个带有该属性可调用的模型。是的,上载到是目前唯一的共同点,但稍后我可能会向不同的子类添加不同的高度、宽度和最大文件大小参数。是否值得为这些子类引入新的DB字段,以便可以重写它们?在前面的评论中,我指的是models.ImageField的max_length、height_field和width_field