Экземпляр Django возвращает none из ImageField
Как я могу решить эту проблему? Я хочу создать модель с изображением и загрузить его в папку с id этого объекта.
Когда я пытаюсь загрузить изображение в том же классе, я не могу сослаться на id, чтобы добавить в url. Путь выглядит как: http://127.0.0.1:8000/media/foto_pacientes/None/image.png
pacientes.models.py
class Pacientes(models.Model):
id = models.AutoField(primary_key=True)
foto = models.ImageField(blank=True, null=True, upload_to=foto_paciente)
def foto_paciente(instance,filename):
print(instance)
return '/'.join(['foto_pacientes', str(instance.id.id), filename])
Однако, когда я пытаюсь загрузить изображение, используя ForeginKey, я могу получить нужный идентификатор. Как: http://127.0.0.1:8000/media/foto_pacientes/1/image.png
imagens.model.py
def imagens_historico(instance, filename):
print(instance)
return '/'.join(['historico', str(instance.id_historico.id_historico), filename])
class ImagensHistorico(models.Model):
id_imagem_historico = models.AutoField(primary_key=True)
imagem = models.ImageField(blank=True, null=True, upload_to=imagens_historico)
id_historico = models.ForeignKey(Historicos, related_name='imagens',
on_delete=models.CASCADE, blank=False, null=False)
Ну, вы не можете ссылаться на id объекта, который еще не создан. Что вы можете сделать, так это использовать первичный ключ объекта для создания папки для хранения изображения .
Удалите поле id_imagem_historico = models.AutoField(primary_key=True)
.
Если требуется, оставьте его .
Эту проблему можно легко решить с помощью этого метода . Поместите его в ваш models.py
Код :
def get_new_image_file_path(self , filename):
return "imagens_historico/{}/image_name.png".format(self.pk)
class ImagensHistorico(models.Model):
imagem = models.ImageField(blank=True, null=True, upload_to=get_new_image_file_path)
id_historico = models.ForeignKey(Historicos, related_name='imagens',
on_delete=models.CASCADE, blank=False, null=False)
Это решит вашу проблему, и то, чего вы хотите, будет легко достигнуто.