Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何防止Django在用户每次提交自定义UserChangeForm时保存图像?_Python_Django - Fatal编程技术网

Python 如何防止Django在用户每次提交自定义UserChangeForm时保存图像?

Python 如何防止Django在用户每次提交自定义UserChangeForm时保存图像?,python,django,Python,Django,因此,我是Django的新手,我定义了一个自定义用户,允许用户使用ModelForm更新他们的配置文件。但是,每次我提交表单时,它都会上载并再次处理缩略图,我如何检查上载字段是否已更改,如果未更改,如何将其从提交中排除 这是我的密码: views.py @login_required def account_edit(request): u = AccountUser.objects.get(pk=request.user.id) if request.method == 'PO

因此,我是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
。缩略图似乎不需要以db为单位

编辑:

我想,你应该把你的照片翻个底朝天看看有没有变。例如,使用
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

我不认为我能完全解决这个问题,但它应该会给你一个方法…

我接受了你的建议,虽然它解决了我的缩略图问题,但表单仍然提交并上传了预填充表单的相同文件