Python 如何访问forms.py(django应用程序)中clean_avatar()中的self.request.user

Python 如何访问forms.py(django应用程序)中clean_avatar()中的self.request.user,python,django,forms,Python,Django,Forms,在Django表单上,我让我的用户上传一个头像。我在forms.py中有一个与相关的ModelForm关联的clean_avatar方法,在上传之前,我正在对提交的avatar进行一些处理。如何在此clean_avatar方法中访问self.request.user?我试过骑在模型的\uuuuu init\uuuuu上,但失败了 对于那些感兴趣的人,我希望在clean_avatar方法中访问self.request.user,以检查现在上传的化身是否与用户在此之前提交的化身相同。这将帮助我在表单

在Django表单上,我让我的用户上传一个头像。我在forms.py中有一个与相关的
ModelForm
关联的
clean_avatar
方法,在上传之前,我正在对提交的avatar进行一些处理。如何在此
clean_avatar
方法中访问
self.request.user
?我试过骑在
模型的
\uuuuu init\uuuuu
上,但失败了

对于那些感兴趣的人,我希望在
clean_avatar
方法中访问
self.request.user
,以检查现在上传的化身是否与用户在此之前提交的化身相同。这将帮助我在表单被重新提交的情况下节省带宽(我已经检查过了;在我的应用程序中,重新提交会导致头像也被重新提交并重新处理)

clean_avatar方法当前看起来如下所示:

def clean_avatar(self):
    image=self.cleaned_data.get("avatar")
    if image:
        try:
            if image.size > 1000000:
                return None
        except:
            pass
        image = Image.open(image)
        image = MakeThumbnail(image)
        return image
    else:
        return None   

我认为最好将其作为一个额外参数传递给表单,以便在整个表单中使用:

class FooForm(models.ModelForm):
    def __init__(self, *args, **kwargs):
        # you take the user out of kwargs and store it as a class attribute
        self.user = kwargs.pop('user', None)
        super(FooForm, self).__init__(*args, **kwargs)

    def clean_avatar(self):
        current_user = self.user
        # use current_user
您的views.py方法:

def view(request):
    foo_form = FooForm(request.POST or None, user=request.user)

这正是我一直在尝试的,但我无法理解如何在我骑过
self
之后访问
clean\u avatar
中的表单数据。那么我会做
self.form
吗?也就是说,
self.cleaned_data.get(“avatar”)
将变成
self.form.cleaned_data.get(“avatar”)
?对不起,我不明白你的问题,你在你的代码中哪里覆盖了
self
?对不起,让我解释一下。当前,clean_avatar中的“self”包含表单数据,我可以使用它访问
self.cleaned_data.get(“avatar”)
。如果我将
user
存储为
self
中的class属性,那么在
clean\u avatar
中,我是否仍然能够执行
self.cleaned\u data.get(“avatar”)
而不会产生任何不良影响?当然,django类也是python类,没有什么比定义实例变量并在类的不同方法中使用它更常见的了。如果您不熟悉python类和实例变量,请阅读以下内容:顺便说一句,在
views.py
中,我使用的是基于类的
UpdateView
,形式与我在问题中提到的形式相同。因此,在我的情况下,您在回答中提到的views.py方法实际上会超越
get\u form
方法,对吗?与中一样,不是
return form\u class(**self.get\u form\u kwargs())
I do
return form\u class(**self.get\u form\u kwargs(),user=self.request.user)