Переименование файлов с автоматически созданным идентификатором
Я создаю сайт для задания, и одной из функций, которую я хотел бы иметь, является присвоение уникального идентификатора любой фотографии, загруженной на сайт.
Я создал форму, которая принимает фотографию, и я надеюсь заставить ее переименовать файл фотографии в идентификатор фотографии и сохранить его в папке, связанной с пользователем, который загрузил его (например, если идентификатор пользователя был 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 работать правильно, если у кого-нибудь есть идеи, как заставить это работать, было бы здорово :))