python - 在 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 }}" />
在您的模板中。
推荐阅读
- google-cloud-platform - Google Vision API:图片上同时显示英语和阿拉伯语
- javascript - 将值传递给 EJS 文件
- android - 使用 ./gradlew assembleDebug 从命令行构建时找不到符号 DataBindingComponent
- python-3.x - 张量流模型的预测失败
- javascript - 有人可以建议一些更好的方法来编写这个 Javascript 代码
- rest - 如何通过配置tomcat产生503错误?
- javascript - 为什么android的代码在IOS中不起作用?
- dialogflow-es - 为什么 Dialogflow nodejs sdk“使用知识库检测意图”方法以 null 响应?(V2Beta)
- javascript - 如何在angularjs中刷新指令数据
- ansible - Ansible:更改=0