在与@karthikr 讨论后,我可以得出以下结论:
如果您需要在验证过程中更改数据,您可以clean_<fieldname>()从ModelForm类中覆盖。在您的clean()方法中,ModelForm您不应该这样做。如果你需要做一些图像调整,我发现最好的地方是模型的save()方法。
我已经解决了这样的问题:
我创建了一个名为的新模块image.py,其中包含一个函数,该函数将图像的绝对路径作为参数,实现调整大小逻辑并修改图像大小。在我的情况下,如果宽度大于给定大小,“调整大小逻辑”会按比例缩小图像。
from PIL import Image
from django.conf import settings
def autoresize_image(image_path):
    image = Image.open(image_path)
    width = image.size[0]
    if width > settings.IMAGE_MAX_WIDTH:
        height = image.size[1]
        reduce_factor = settings.IMAGE_MAX_WIDTH / float(width)
        reduced_width = int(width * reduce_factor)
        reduced_height = int(height * reduce_factor)
        image = image.resize((reduced_width, reduced_height), Image.ANTIALIAS)
        image.save(image_path)
save()我从包含ImageField要调整大小的模型中的方法调用此函数。这里要记住的几点:super()在尝试调整图像大小之前调用,否则将找不到它,因为它尚未保存在您的硬盘中,如果ImageField不需要,请检查是否给出了值。看起来像:
def save(self, *args, **kwargs):
    super(Startup, self).save(*args, **kwargs)
    if self.logo:
        autoresize_image(self.logo.path)
感谢@Jingo 以及他的评论。它非常有用:)