[英]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.