Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django继承-访问子类字段_Django_Inheritance - Fatal编程技术网

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,

我有以下Django型号:

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