Как получить pk созданной записи для сохранения объекта с значением pk из CreateView?

В моём случае я пытаюсь сохранить наименование файла *изображение с значение pk из CreateView. Понимаю, что pk не увижу до сохранения в БД новой записи.

class DocumentationCreateView(LoginRequiredMixin, CreateView):
model = Documentation
fields = ['img', 'date', 'description', ]
template_name = "photo/documentation_add.html"

def form_valid(self, form):
    form.save(commit=False)
    form.instance.owner = self.request.user
    response = super().form_valid(form)
    print('form_valid')
    print(form.instance.pk)
    return response

Вижу pk, всё логично...

Далее имею функцию переименования файла и удаления экземпляра уже созданного...

class DocumentationMixin:
@staticmethod
def my_files_path(instance, filename, ):
    name = os.path.join(filename)
    print("utils pk")
    print(instance.pk)

    pk = instance.pk

    name = f'documentation{pk}_{instance.owner.username}_{instance.owner.pk}.jpg'
    path = f"documentation/{name}"
    storage = instance._meta.get_field('img').storage
    print("utils pk2")
    print(instance.pk)
    if storage.exists(path):
        storage.delete(path) 
    return path

Есть сигнал (начала читать и пробовать делать):

@receiver(post_save, sender=Documentation)
def create_documentation_file(sender, instance, created, **kwargs):
if created:
    # Генерируем имя файла после сохранения
    path = DocumentationMixin.my_files_path(instance, instance.img.name,)
    print('sygnals pk')
    print(instance.pk)
    instance.save()

Вижу соответственно записи при создании объекта:

utils pk
None
utils pk2
None
utils pk
156
utils pk2
156
sygnals pk
156
form_valid
156

Получаю наименование файла с не определившимся pk (id=None) documentationNone_user1_1.jpg При обновлении поста я уже, естественно/логично, получаю уже известный pk\id записи и всё происходит согласно моей логике. Получаю наименование, пример, с pk=156: documentation156_user1_1.jpg

КАК мне при создании объекта передать pk? Сижу и думаю долго, понимаю, что рядом, но блин уже паника. Помогите определить дальнейшие шаги, как это правильно сделать?


Ответы (0 шт):