Как изменить имя файла при загрузке поля изображения в Django

При загрузке поля изображения (медиафайла) в Django возникает вопрос о переименовании файла.

Урл страницы для загрузки изображения содержит pk внешнего ключа. Я хочу переименовать файл изображения в {pk}.png при загрузке изображения.

Когда код ниже работает, он сохраняется как none. В чем проблема?

[urls.py]

app_name = 'dataroom'
urlpatterns = [
    path('det/<int:research_id>/', views.detData, name='DataDet'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)    

[models.py]

import .utils import rename_imagefile_to_uuid

class protocol_upload(models.Model):
    trial = models.ForeignKey(Research, on_delete=models.SET_NULL, blank=True, null=True)
    protocol_file = models.FileField(upload_to='protocol/', null=True, blank=True)
    clusion= models.ImageField(upload_to='criteria/clusion/', null=True, blank=True)
    reference = models.ImageField(upload_to=rename_imagefile_to_uuid, storage=OverwriteStorage(), null=True, blank=True)

def image_save(self, *args, **kwargs):
    if self.id is None:
        saved_image = self.reference
        self.reference = None
        super(protocol_upload, self).save(*args, **kwargs)
        self.reference = saved_image

    super(protocol_upload, self).save(*args, **kwargs)

def __str__(self):
    return str(self.trial)

[utils.py]

import os
from uuid import uuid4

def rename_imagefile_to_uuid(instance, filename):
    upload_to = 'reference/'
    ext = filename.split('.')[-1]
    uuid = uuid4().hex

    if instance:
        filename = '{}.{}'.format(instance.id, ext)
    else:
        filename = '{}.{}'.format(uuid, ext)

    return os.path.join(upload_to, filename)

[views.py]

def detData(request, research_id):
    research = Research.objects.get(id=research_id)
    protocol = protocol_upload.objects.all()

    for reference in request.FILES.getlist('reference'):
        protocol = protocol_upload()
        protocol.research = research_id
        protocol.reference = reference
        protocol.save()

context = {
           'protocol': protocol,
           'research': research,
           }

return render(request, '/detail.html', context)

[detai.html]

    <form method="POST" action="{% url 'dataroom:DataDet' research_id=research.id %}" enctype="multipart/form-data">
              {% csrf_token %}
              <input type="file" name="reference" multiple>
              <input type="submit" value="Submit">
          </form>
Вернуться на верх