在 django celery 任务中更改保存的文件路径

Change saved filepath in a django celery task

我有一个名为 Flights

的模型
class Flights(models.Model):
    field = models.ForeignKey(Field, on_delete=models.CASCADE)
    datetime = models.DateTimeField(blank=True, null=True, default=timezone.now())

    nir = models.FileField(upload_to = user_directory_path_flights, null=True, blank=True)
    red = models.FileField(upload_to = user_directory_path_flights, null=True, blank=True)
    rededge = models.FileField(upload_to = user_directory_path_flights, null=True, blank=True)
    green = models.FileField(upload_to = user_directory_path_flights, null=True, blank=True)
   

用户上传了一些文件,通过 celery 任务我得到了这些文件并将它们编辑成新文件。之后虽然它们保存在 src 文件夹中,但我想将它们保存在 src/media/flights/username 我怎么做 ?我应该更改航班模型并添加文件路径或其他内容吗?怎么会这样?

芹菜任务:

import sys
import math
from .models import *
import cv2 as cv
import numpy as np
from PIL import Image, ImageOps, ImageChops
import PIL

@shared_task(bind=True)
def get_Flights_Data(self,flight_id):
    
    identifier = Flights.objects.get(pk=flight_id)
    redF = identifier.red
    nirF =  identifier.nir
    rededgeF = identifier.rededge
    print('Analyzing Flight')
    red = Image.open(redF)
    nir = Image.open(nirF)
    rededge = Image.open(rededgeF)
 ...............
 pil_image=Image.fromarray(ndvi)
    img = pil_image

    img.save("ndvi_agr.tiff", format="TIFF", save_all=True) #1

很遗憾,您没有正确提出问题,所以我会尽力帮助您。

您可以重写之前保存在模型上的文件。 所以你所要做的就是在打开和更改文件后将其保存在相同的文件路径中。

red= Image.open(redF)
red.save(fp=redF.filepath)

另一种选择是您可以删除旧文件并保存新文件并将新文件路径提供给您的模型。 别忘了保存它。