0

ImageFieldのrest_to_stringメソッドを/ MEDIA /のサブフォルダを作成するために動的に設定したいと考えています。これは "{0} _ {1}"です。 user_id、task_id)。ImageFieldのupload_toメソッドを動的に変更するように修正する

ファイルとタスクIDはPOSTリクエストから送信されます。今のところ、サブフォルダを作成するために必要な変数は空です。私はインスタンスが保存されていない間、私はtask_idを利用することができないと不安です。

質問サブフォルダを作成するにはどうすればよいですか?事前に

{ 

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) 

ありがとう:

例要求はそのように見えます!

答えて

0

私は何が間違っているかを考え出しました。シリアライザステップでTaskとProcessingRawFilesItemモデルの間に既にリレーションが作成されているため、

task_id = instance.task_id 

は無効です。 1つを修正する:

task_id = instance.task_id.id 
関連する問題