Отключите очистку изображений в Django

Я создаю несколько бейджей для пользователей. Я использую django-CleanUp для удаления других медиа объектов. Когда пользователь набирает достаточно высокий балл, я хочу заменить старый бейдж на новый. Но при смене изображения старое изображение (бейдж) удаляется . Я не хочу этого. Я хочу сохранить старый значок, потому что он все еще используется другими пользователями

Мои взгляды:

def liked_post(request, pk):
    user_update = get_object_or_404(UserRanks, user = post.username)
        
    if  user_update.score < 50:
          user_update.rank_image = "guard.gif"

    elif user_update.score < 100:
           user_update.rank_image = "captain1.gif"

    elif user_update.score < 300:
           user_update.rank_image = "knight1.gif"
    user_update.save()

мои модели:

class UserRanks(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)
   rank_image = models.ImageField(
        verbose_name="Rank Gif", default="guard.gif", null=True, blank=True)
   score = models.IntegerField(
        null=True, blank=True, verbose_name="Score", default=0)

   def save(self, *args, **kwargs):
       super(UserRanks, self).save(*args, **kwargs)

есть ли способ сохранить старое изображение без удаления django-clean-up?

Вам не нужно создавать отдельный медиа элемент для одного и того же бейджа для каждого пользователя. Храните изображения бейджей в статическом хранилище (не в медиа) и просто имейте метод модели, который возвращает URL нужного изображения:

from django.templatetags.static import static

class UserRanks(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    score = models.IntegerField(
                null=True, blank=True, verbose_name="Score", default=0)
    # Delete "rank_image" column

    @property
    def rank_image_url(self):
        if self.score < 50:
            return static("image/guard.gif")
        elif user_update.score < 100:
            return static("image/captain1.gif")
        elif user_update.score < 300:
            return static("image/knight1.gif")

Также удалите код, который обновляет rank_image из вашего представления. Затем просто используйте что-то вроде

<img src="{{ user.userranks.rank_image_url }}" />

в ваших шаблонах.

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