Переименование файлов с автоматически созданным идентификатором

Я создаю сайт для задания, и одной из функций, которую я хотел бы иметь, является присвоение уникального идентификатора любой фотографии, загруженной на сайт.

Я создал форму, которая принимает фотографию, и я надеюсь заставить ее переименовать файл фотографии в идентификатор фотографии и сохранить его в папке, связанной с пользователем, который загрузил его (например, если идентификатор пользователя был 1, а идентификатор фотографии был 10, структура файла будет /media/userImages/1/10.jpg) Однако у меня возникают трудности с доступом к данным, необходимым для этого. Похоже, что при том, как я это настроил, фотоID генерируется при сохранении формы.

Вот код:

Views.py

def addimage(request):
    form = ImageForm(request.POST, request.FILES)
    print(form.is_bound)

    if request.method == "POST":
        if form.is_valid():
            form.time = datetime.datetime.now()
            picture = form.save(commit=False)
            picture.image.upload_to = "/manageImages/" + str(request.user.id) + "/" + str(picture.ID)
            print(picture.image.upload_to)
            picture.save()
            return redirect("/closeup/")
        elif request.POST:
            print("ERROR IN FORM")
            print(form.errors)

Models.py

class Picture(models.Model):
    ID = models.BigAutoField(primary_key=True)
    image = models.ImageField(upload_to='userImages/', null=False, blank=False)
    name = models.CharField(max_length=100)
    url = models.URLField()
    likes = models.IntegerField(default=0)
    dislikes = models.IntegerField(default=0)
    time = models.DateTimeField(auto_now_add=True)
    # TODO - add 'Uploaded by' foreign key

Forms.py

class ImageForm(forms.ModelForm):
    image = forms.ImageField()
    name = forms.CharField(max_length=100, help_text="Enter image name")
    ID = forms.UUIDField(widget=forms.HiddenInput(), required=False)
    url = forms.URLField(widget=forms.HiddenInput(), required=False)
    likes = forms.IntegerField(widget=forms.HiddenInput(), required=False, initial=0)
    dislikes = forms.IntegerField(widget=forms.HiddenInput(), required=False, initial=0)
    time = forms.DateTimeField(widget=forms.HiddenInput(), required=False)

    class Meta:
        model = Picture
        fields = ('name', 'image')

Когда я суммирую форму, кажется, что ID не имеет значения до вызова picture.save(), поэтому я не могу изменить свойство 'upload_to', чтобы фотография сохранилась в нужном месте. И у меня возникла вторая проблема, когда изменение переменной 'upload_to' не влияет на то, куда сохраняется файл. Любая помощь по любому из этих вопросов будет очень признательна (Также мне не очень нравится способ, которым я генерирую идентификаторы, он кажется мне немного дилетантским, но я не смог заставить uuids работать правильно, если у кого-нибудь есть идеи, как заставить это работать, было бы здорово :))

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