1

I want to set up in my rest service upload_to method in ImageField dynamically for creating sub-folders in /MEDIA/, that will be called "{0}_{1}".format(user_id, task_id).

File and task_id are going from POST request. For now those variables needed to create sub-folders are empty. I'm quessing that I can not utilize task_id while instance is not saved.

Question is how can I create my sub-folders?

Example request looks like that:

{
    file_location: binary_file,
    task_id: 15
}

serializers.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)

Thanks in advance!

Aneesh R S
  • 3,807
  • 4
  • 23
  • 35
sorryMike
  • 769
  • 9
  • 25

1 Answers1

0

I figured out what was wrong. The relation was already created between Task and ProcessingRawFilesItem models in serializer step, so

task_id = instance.task_id

was invalid. Correct one wil be:

task_id = instance.task_id.id
sorryMike
  • 769
  • 9
  • 25