如何在Django表单的clean函数中获取请求的用户?

2024-07-02 13:07:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在django表单的clean函数中获取请求的用户,但我无法做到这一点。我试着通过简单地说self.request.user,它可以在视图中工作,但不能在表单中工作。py,有人知道如何在djnago表单中获取请求的用户吗

forms.py

class KycModelForm(forms.ModelForm):
    
    class Meta:
        model = KycModel
        fields = '__all__'
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(KycModelForm, self).__init__(*args, **kwargs)

     def clean(self):
        cleaned_data = super().clean()
        user = User.objects.get(username=self.request.user)
        print(user)

views.py

class KycFormCreateView(CreateView):
    
    form_class = KycModelForm
    model = KycModel
    template_name = "accounts/kyc/new_kyc.html"
    
    def form_valid(self, form):
        user_kyc = form.save(commit=False)
        user_kyc.owner = self.request.user 
        user_kyc.save()
        return super().form_valid(form) 

Tags: 用户pyselfformclean表单requestdef
1条回答
网友
1楼 · 发布于 2024-07-02 13:07:36

你从来没有在一开始就构造一个带有请求的表单。您应通过以下方式传递此消息:

class KycFormCreateView(CreateView):
    form_class = KycModelForm
    model = KycModel
    template_name = 'accounts/kyc/new_kyc.html'

    def get_form_kwargs(self, *args, **kwargs):
        form_kwargs = super().get_form_kwargs(*args, **kwargs)
        form_kwargs['request'] = self.request
        return form_kwargs
    
    def form_valid(self, form):
        user_kyc = form.save(commit=False)
        user_kyc.owner = self.request.user 
        user_kyc.save()
        return super().form_valid(form)

clean函数中,您不需要查询用户self.request.user是一个用户对象,因此您可以直接使用self.request.user

class KycModelForm(forms.ModelForm):
    
    class Meta:
        model = KycModel
        fields = '__all__'
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(KycModelForm, self).__init__(*args, **kwargs)

     def clean(self):
        cleaned_data = super().clean()
        user = self.request.user
        print(user)
        return cleaned_data

相关问题 更多 >