首页 > 解决方案 > Django 在覆盖保存函数调用时更改变量类型

问题描述

在覆盖保存方法的同时,将 resizeUploadedImage 方法从 str 类型调用为 Project 类型后,Django 似乎正在更改我的变量的类型。

我以前让这个方法正常工作,但后来我将逻辑移到了 save 方法之外,并移到了另一个在 save 内部调用的方法中。我这样做是为了在保存之前可以做很多事情,但是现在当我调用 resizeUploadedImage 方法时,我传递的变量似乎从 str 更改为 Project。我尝试将 str(fname) 添加到变量调用中。

def save(self, *args, **kwargs):
    if self.image:
        url = self.image.url
        surl = url.split('/')
        fname = surl[-1]

        print('\t TRYING TO RESIZE IMAGE')
        print('filename',fname)
        print('top type', type(fname))
        self.resizeUploadedImage(self, fname)

        # the additional function I wanted to add
        # self.createThumbnail(self, fname)
      super(Project, self).save(*args, **kwargs)
def resizeUploadedImage(self, fname, *args):
    '''Resize the image being uploaded.'''
    print('resize top type', type(fname))
    try:
        im = Image.open(self.image)
        print(im.size)
        if im.size > IMAGE_SIZE:
            im_sized = im.resize(IMAGE_SIZE, Image.ANTIALIAS)
            image_io = BytesIO()
            im_sized.save(image_io, im.format)
            print('resize type', type(fname))
            self.image.save(fname, ContentFile(image_io.getvalue(), False))
    except IOError as e:
        print("Could not resize image for", self.image)
        print(e)

当我在 Django shell 中运行它时,它可以正常工作并调整图像大小但是当我运行我的测试时,我得到 TypeError: join() argument must be str or bytes, not 'Project'

编辑:我在这里有两个问题。1:如何确保变量保持预期的str?2:我选择传递变量而不是像我最初在每个方法中那样手动抓取名称以避免重复代码。这是正确的心态,还是我应该抓住它以确保完整性?

标签: pythondjango

解决方案


self.resizeUploadedImage(self, fname)

这是不正确的。你复制了自己。


推荐阅读