【问题标题】:Modify ImageField upload_to method to work dynamically修改 ImageField upload_to 方法以动态工作
【发布时间】:2017-07-18 06:37:30
【问题描述】:

我想在 ImageField 中的我的 rest 服务 upload_to 方法中动态设置以在 /MEDIA/ 中创建子文件夹,这将被称为“{0}_{1}”.format(user_id, task_id)。

File 和 task_id 来自 POST 请求。目前,创建子文件夹所需的那些变量是空的。我在问,在未保存实例时我无法使用 task_id。

问题是如何创建我的子文件夹?

示例请求如下所示:

{
    file_location: binary_file,
    task_id: 15
}

序列化器.py

class PostProcessingRawFilesSerializer(serializers.ModelSerializer):
    class Meta:
        model = ProcessingRawFilesItem
        fields = (
            'id',
            'file_location',
            'task_id'
        )

        def create(self, validated_data):

            task_id_data = validated_data.pop('task_id')
            task = Task.objects.get(pk=task_id_data)
            raw_image = ProcessingRawFilesItem(task_id=task, **validated_data)

            return raw_image

models.py

def user_directory_path(instance, filename):
    task_id = instance.task_id
    user_id = Task.objets.get(pk=task_id).owner_id
    return '{0}_{1}/{2}'.format(user_id, task_id, filename)

class ProcessingRawFilesItem(models.Model):
    id = models.AutoField(primary_key=True)
    file_location = models.ImageField(upload_to=user_directory_path)
    task_id = models.ForeignKey(Task, related_name='processing_raw_files', on_delete=models.CASCADE, null=True, blank=True)

提前致谢!

【问题讨论】:

    标签: python django django-models django-rest-framework django-uploads


    【解决方案1】:

    我知道出了什么问题。 Task 和 ProcessingRawFilesItem 模型之间的关系已经在序列化步骤中创建了,所以

    task_id = instance.task_id
    

    无效。正确的是:

    task_id = instance.task_id.id
    

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 2018-12-17
      • 2011-01-15
      • 2011-02-08
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 2018-11-08
      相关资源
      最近更新 更多