Как сделать копию Django FileField без повторного применения пути к директории upload_to?

Моя модель Django содержит следующее:

def photo_directory_path(instance, filename):
    return 'photos/{0}/foo-{1}'.format(instance.id, filename)

photo = models.FileField(null=True, blank=True, editable=True, upload_to=photo_directory_path, max_length=500)

Допустим, у меня есть экземпляр этой Модели под именем oldModel, и я хочу создать новый экземпляр и использовать ту же фотографию. Я не хочу хранить фотографию снова, но имею ссылку на тот же файл:

newModel = Model()
newModel.photo = oldModel.photo
newModel.save()

Однако это не работает, поскольку photo_directory_path будет снова применен к имени файла. Как я могу скопировать FileField как "raw"?

Вы можете использовать отношение ForeingKey на второй модели для обращения к уже сохраненной фотографии из первой модели.

def photo_directory_path(instance, filename):
    return 'photos/{0}/foo-{1}'.format(instance.id, filename)

class FirstModel(models.Model):
      photo = models.FileField(null=True, blank=True, editable=True, upload_to=photo_directory_path, max_length=500)


class SecondModel(models.Model):
      photo_reference = models.ForeignKey(FirstModel, on_delete=models.CASCADE)

Вернуться на верх