django表单设置当前登录用户 [英] django form set current login user

查看:263
本文介绍了django表单设置当前登录用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  @login_required 
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),

pre>

我有这个观点,我想在我的评论表单作者字段中自动设置当前登录的用户。但我不知道如何。任何想法/提示?
以下是我的表单:

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆