簡體   English   中英

以Django表單獲取當前登錄的用戶

[英]Get the current logged user in the django form

我正在建立一個博客網站,每個用戶最多只能發布3個博客

所以我在form.py文件中寫了它,這樣它可以在提交之前驗證博客的數量

這是表格代碼

class BlogForm(forms.ModelForm):
blog=forms.CharField(label='',
            widget=forms.Textarea(
                    attrs={'placeholder': "Your blog",
                        "class": "form-control",
                        }
                ))

def __init__(self, *args, **kwargs):
    self.user = kwargs.pop('user')
    super(BlogForm, self).__init__(*args, **kwargs)

def clean(self):
    cleaned_data=super(BlogForm, self).clean()
    user=cleaned_data.get(self.request.user)
    if Blog.objects.filter(user=user).count()>=3:
        raise forms.ValidationError("You have exceeded limit.")

class Meta:
    model=Blog
    fields = ['user',
              'blog',
             'tags']

我的基於班級的博客創建視圖

class BlogCreateView(FormUserNeededMixin,CreateView):
form_class = BlogForm
template_name = 'blog/createview.html'
success_url = reverse_lazy('home')
form = BlogForm(user=request.user)

預期結果:在同一登錄用戶的第四次博客提交中,“您已超出限制”。 此錯誤必須出現

實際:“ BlogForm”對象沒有屬性“請求”,此錯誤出現

class BlogForm(forms.ModelForm):
blog=forms.CharField(label='',
            widget=forms.Textarea(
                    attrs={'placeholder': "Your blog",
                        "class": "form-control",
                        }
                ))

將此方法添加到您的Form類

def __init__(self,user, *args, **kwargs):
        // do something with user

視功能

form_class = BlogForm
def get_form_kwargs(self, *args, **kwargs):
    kwargs = super().get_form_kwargs(*args, **kwargs)
    kwargs['user'] = self.request.user
    return kwargs

您需要將請求對象傳遞給表單。 如果您使用的是基於方法的視圖,請按照以下步驟操作:

def some_view(request):
    form = BlogForm(request.POST,request=request)

如果使用的是基於類的視圖,則重寫get_form_kwargs()方法:

class SomeView(CreateView):

   def get_form_kwargs(self, *args, **kwargs):
     form_kwargs = super(SomeView).get_form_kwargs(*args, **kwargs)
     form_kwargs['request'] = self.request
     return form_kwargs

然后重寫BlogForm以從視圖接受請求:

class BlogForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        request = kwargs.pop('request', None)
        if request:
           self.request = request
        super(BlogForm, self).__init__(*args, **kwargs)

然后您應該能夠在self.request訪問請求對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM