【问题标题】:How to get requested user in clean function in django forms?如何在 django 表单中以干净的功能获取请求的用户?
【发布时间】:2021-04-10 18:13:30
【问题描述】:

好吧,我想在 django 表单的干净功能中获得请求的用户,但我无法做到这一点。我试图通过简单地说 self.request.user 来实现这一点,它在视图中有效,但在 forms.py 中无效,有人知道如何在 djnago 表单中获取请求的用户吗? p>

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) 

【问题讨论】:

    标签: python django django-models django-views django-forms


    【解决方案1】:

    您从一开始就不会构建带有请求的表单。你应该通过:

    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

    【讨论】:

      猜你喜欢
      • 2013-09-17
      • 1970-01-01
      • 2021-07-17
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2019-12-31
      相关资源
      最近更新 更多