@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),
)
Run Code Online (Sandbox Code Playgroud)
我有这个观点,我想在我的评论表单作者字段中自动设置当前登录用户.但我不知道如何.有什么想法/提示吗?以下是我的表格:
class ReviewForm(ModelForm):
class Meta:
model = Review
fields = ('title','category', 'body', )
widgets = {
'body': Textarea(attrs={'cols': 60, 'rows': 20}),
}
Run Code Online (Sandbox Code Playgroud)
ete*_*ode 15
我总是通过接受我的表格中的新kwarg __init__并保存值直到保存时间来完成此操作.
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
Run Code Online (Sandbox Code Playgroud)
然后在我看来:
def post_review(request):
# ... snip ...
if request.method == 'POST'
form = ReviewForm(request.POST, user=request.user)
if form.is_valid():
form.save()
return HttpResponseRedirect('/thanks/') #or whatever the url
else:
# Don't forget to add user argument
form = ReviewForm(user=request.user)
# ... snip ...
Run Code Online (Sandbox Code Playgroud)
如果Review.author不是必填字段,您可以向kwargs.pop调用添加第二个值以设置默认值,例如None.否则,如果user没有提供kwarg,它将引发错误,实际上使其成为必需的参数.