在我的個人資料模型上,我有一個默認影像。但是我希望所有具有默認影像的帳戶都將讀取相同的影像,但是當創建一個新帳戶時,default.jpg 將被重新上傳到 s3 存盤桶。
如果我將其洗掉并且保存代碼時問題消失,則該問題是由壓縮功能引起的。
我怎么能不讓它重新保存default.jpg
def compress(image):
im = Image.open(image)
out_put_size = (300,300)
im.thumbnail(out_put_size)
# create a BytesIO object
im_io = BytesIO()
# save image to BytesIO object
im = im.resize([500,500])
#resize image
im = im.convert("RGB")
im = im.save(im_io,'JPEG', quality=75)
# create a django-friendly Files object
new_image = File(im_io, name=image.name)
return new_image
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, max_length=30)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
def __str__(self):
return f'{self.user.username} Profile'
def save(self, *args, **kwargs):
initial = self._state.adding
#image compression start
if self.image and initial:
# call the compress function
new_image = compress(self.image)
# set self.image to new_image
self.image = new_image
#image compression end
super(Profile,self).save(*args, **kwargs)
uj5u.com熱心網友回復:
感謝您提出新問題。self.image總是會評估為,True因為您設定了默認影像。使用默認值,它永遠不會為空。因此呼叫壓縮函式。
您需要檢查實體頭像的名稱屬性是否與默認值不同。您可以使用get_field()meta 選項獲取欄位,并使用 查找默認欄位值get_default()。
因此,與實體的影像名稱進行比較的完整值將是Profile._meta.get_field('avatar').get_default().
您可以將其分解為多個變數以提高可讀性或將 Profile 替換為self.__class__.
def save(self, *args, **kwargs):
initial = self._state.adding
avatar_field = Profile._meta.get_field('avatar')
default_image_name = avatar_field.get_default()
no_default_image = self.avatar.name != default_image_name
#image compression start
if no_default_image and initial:
# call the compress function
new_image = compress(self.image)
# set self.image to new_image
self.image = new_image
#image compression end
super(Profile,self).save(*args, **kwargs)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434710.html
上一篇:djangourl中的可選引數
