Как заменить или перезаписать изображения, хранящиеся в 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

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