Как сделать копию 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)