django表单设置当前登录用户 [英] django form set current login user
问题描述
@login_required
pre>
def post_review(request):
如果request.method =='POST':
formset = ReviewForm(request.POST)
如果formset.is_valid():
formset.save(commit = False)
#formset.author = User.objects.get(pk = int(request.user.id))
formset.pub_date = datetime.datetime.now
formset.save()
return HttpResponseRedirect(reverse(review_index))
else:
formset = ReviewForm()
return render_to_response(review / post_review.html,
{formset:formset},context_instance = RequestContext(request),
)
我有这个观点,我想在我的评论表单作者字段中自动设置当前登录的用户。但我不知道如何。任何想法/提示?
以下是我的表单:class ReviewForm(ModelForm):
class Meta:
model = Review
fields =('title','category','body')
widgets = {
'body':Textarea(attrs = {'cols':60,行':20}),
}
解决方案我一直这样做,在我的表单的
__ init __
中接受一个新的kwarg,并保存该值直到保存时间。
$ $ $ $ $ $ $ $ $ $
class =
model =评论
fields =('title','category','body ',)
widgets = {
'body':Textarea(attrs = {'cols':60,'rows':20}),
}
def __init __(self,* args,** kwargs):
self._user = kwargs.pop('user')
super(ReviewForm,self).__ init __(* args,** kwargs)
def save(self,commit = True) :
inst = super(ReviewForm,self).save(commit = False)
inst.author = self._user
如果提交:
inst.save()
self.save_m2m()
return inst
然后在我的视图中:
def post_review(request):
#... snip ...
form = ReviewForm(request.POST ,user = request.user)
#... snip ...
如果 Review.author
不是必填字段,您可以添加第二个值到 kwargs.pop
调用以设置默认,如无
。否则,如果未提供用户
kwarg,则会引发错误,有效地使其成为必需的参数。
@login_required
def post_review(request):
if request.method == 'POST':
formset = ReviewForm(request.POST)
if formset.is_valid():
formset.save(commit=False)
#formset.author = User.objects.get(pk=int(request.user.id))
formset.pub_date = datetime.datetime.now
formset.save()
return HttpResponseRedirect(reverse(review_index))
else:
formset = ReviewForm()
return render_to_response("review/post_review.html",
{"formset": formset}, context_instance=RequestContext(request),
)
I have this view, I want to auto set the current logged-in user in my review form author field. But I dont know how. Any ideas/hint pls? Below is my form:
class ReviewForm(ModelForm):
class Meta:
model = Review
fields = ('title','category', 'body', )
widgets = {
'body': Textarea(attrs={'cols': 60, 'rows': 20}),
}
I've always done this by accepting a new kwarg in my form's __init__
, and saving the value until save-time.
class ReviewForm(ModelForm):
class Meta:
model = Review
fields = ('title','category', 'body', )
widgets = {
'body': Textarea(attrs={'cols': 60, 'rows': 20}),
}
def __init__(self, *args, **kwargs):
self._user = kwargs.pop('user')
super(ReviewForm, self).__init__(*args, **kwargs)
def save(self, commit=True):
inst = super(ReviewForm, self).save(commit=False)
inst.author = self._user
if commit:
inst.save()
self.save_m2m()
return inst
And then in my view:
def post_review(request):
# ... snip ...
form = ReviewForm(request.POST, user=request.user)
# ... snip ...
If Review.author
isn't a required field, you can add a second value to the kwargs.pop
call to set a default, like None
. Otherwise, if the user
kwarg isn't provided, it'll raise an error, effectively making it a required argument.
这篇关于django表单设置当前登录用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!