[英]How do I prevent Django from saving an Image each time a user submits a custom UserChangeForm?
因此,我是Django的新手,我定義了一個自定義用戶,允許用戶使用ModelForm更新其個人資料,但是每次我提交表單上傳並再次處理縮略圖時,如何檢查上傳內容字段已更改,如果沒有,則將其從提交中排除?
這是我的代碼:
views.py
@login_required
def account_edit(request):
u = AccountUser.objects.get(pk=request.user.id)
if request.method == 'POST':
form = UserChangeForm(request.POST, request.FILES, instance=request.user)
if form.is_valid():
form.save()
else:
form = UserChangeForm(instance=request.user)
return render_to_response('accounts/account.html', locals(), RequestContext(request))
models.py
class AccountUser(AbstractUser):
about = models.TextField(blank=True, null=True)
occupation = models.CharField(max_length=255, blank=True, null=True)
avatar = models.ImageField(upload_to="accounts/avatars", blank=True, null=True)
slug = models.SlugField(default='', blank=True)
following = models.ManyToManyField('AccountUser', related_name="followed_by", blank=True, null=True)
thumbnail = models.ImageField(upload_to="accounts/avatars/thumbnails", blank=True, null=True)
def save(self, *args, **kwargs):
if self.avatar is not None:
img = Image.open(self.avatar.file)
thumbnail = ImageOps.fit(img, (220, 220,), method=Image.ANTIALIAS)
temp_handle_img = StringIO()
img.save(temp_handle_img, 'png')
temp_handle_img.seek(0)
temp_handle_thumbnail = StringIO()
thumbnail.save(temp_handle_thumbnail, 'png')
temp_handle_thumbnail.seek(0)
suf_thumbnail = SimpleUploadedFile(os.path.split(self.avatar.name[-1],temp_handle_thumbnail.read(), content_type='image/png')
fname_thumbnail = "%s.png" % os.path.splitext(self.avatar.name)[0]
sufImg = SimpleUploadedFile(os.path.split(self.avatar.name)[-1], temp_handle_img.read(), content_type='image/png')
fnameImg = "%s.png" % os.path.splitext(self.avatar.name)[0]
self.thumbnail.save(fname_thumbnail, suf_thumbnail, save=False)
self.avatar.save(fnameImg, sufImg, save=False)
if not self.slug:
self.slug = slugify(self.username)
super(AccountUser, self).save(*args, **kwargs)
您應該從模型字段中刪除“縮略圖”並將其設置為def
。 縮略圖似乎不需要在數據庫中。
編輯:
我認為,您應該對圖片進行哈希處理以查看是否已更改。 例如,使用hashlib.md5
。
def save(self, *args, **kwargs):
if self.avatar is not None:
# Do your stuff
cur_file = AccountUser.objects.get(pk=self.pk).avatar.file
cur_file_hash = md5(cure_file.read()).hexdigest()
new_file_hash = md5(temp_handle_img.read()).hexdigest()
if cur_file_hash != new_file_hash:
# Do some stuff
我認為我無法完全解決它,但是它應該給您一種方法...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.