使用 Django 管理命令的媒体位置错误

Wrong media location using Django management command

我正在下载图像并将其保存到单独媒体应用程序上的模型图像字段中。代码在视图中时一切正常,但是当我将代码移到管理命令中时,我无法将图像保存到单独的媒体位置。在正确保存到 /home/me/webapps/myapp_production_media/images 之前,现在文件被错误地保存到 /home/me/webapps/myapp_production_django/src/media/images

命令:

download_image('temp', model_instance.image, new_image)

def download_image(name, image, url):
    input_file = StringIO(urllib2.urlopen(url).read())
    output_file = StringIO()
    img = Image.open(input_file)
    if img.mode != "RGB":
        img = img.convert("RGB")
    img.save(output_file, "JPEG")
    image.save(name+".jpg", ContentFile(output_file.getvalue()), save=False)

型号:

class MyModel(models.Model):
    image = models.ImageField(upload_to='images', null=True, blank=True)

我已将 myapp_production_media/images 路径添加到 name+".jpg",但它没有改变任何内容。我猜这是因为模型中的图像字段没有访问 settings.py 中的 media_root(因为代码是管理命令)?

我建议在命令文件的开头执行以下操作。

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings") 

其中 app.setting 是 setting.py 所在的位置。

仔细检查您在 运行 管理命令时是否使用相同的设置文件。生产设置通常不配置为默认值,在这些情况下需要在命令行上给出。