Как заменить или перезаписать изображения, хранящиеся в cloudinary, используя django
Я хочу настроить изображение профиля пользователя, но не хочу постоянно добавлять новые файлы каждый раз, когда они меняют изображение, есть ли способ перезаписать или заменить изображение в базе данных cloudinary Вот модели :
class CloudinaryField(BaseCloudinaryField):
def upload_options(self, model_instance):
return {
'public_id': UserProfile.user.username,
'filename': "Hey",
'unique_filename': False,
'overwrite': False,
'resource_type': 'image',
'tags': ['Profile'],
'invalidate': True,
'quality': 'auto:eco',
}
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
date_created = models.DateTimeField(auto_now_add=True)
Nick_Name = models.CharField(default="Hey", max_length=250)
Profile_pic = CloudinaryField('Profile_Pic', default="")
формирует :
class UserProfilePage(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['Nick_Name', 'Profile_pic']
help_texts = {
'Nick_Name': 'This will act as your display name',
}
Profile_pic = CloudinaryFileField(
options={
'folder': 'Profile/',
})
И, наконец, мнения :
def edit(request):
func = data(request)
form = UserEdit(initial={'email': request.user.email})
profile = UserProfilePage(initial={'Nick_Name': request.user.userprofile.Nick_Name,
'Profile_pic': request.user.userprofile.Profile_pic.url})
if request.method == "POST":
form = UserEdit(data=request.POST or None, instance=request.user)
profile = UserProfilePage(data=request.POST or None, instance=request.user.userprofile, files=request.FILES)
if form.is_valid() and profile.is_valid():
user = form.save()
profiles = profile.save()
return redirect("Profile_Page")
ctx = {
'form': form,
'profile': profile,
'url': func[0],
'name': func[1],
'date': func[2],
}
return render(request, "Edit_User.html", ctx)
Если требуется дополнительный код, пожалуйста, прокомментируйте его, я обязательно добавлю его в вопрос. Большое спасибо
Трудно понять, что вы передаете в Profile_pic
для класса UserProfilePage
. Но в разделе options вы должны передать параметры загрузки:
'public_id': UserProfile.user.username,
'overwrite': True,
'resource_type': 'image',
'invalidate': True,
Это должно перезаписать актив с этим публичным идентификатором и сделать его недействительным на уровне CDN. Это описано в документации Cloudinary здесь: https://cloudinary.com/documentation/django_image_and_video_upload#django_forms_and_models