Django:CommentForm工作不正常,没有错误?

2024-10-02 18:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

正在尝试创建注释窗体,如下所示:

class CommentCreationForm(forms.Form):
    body = forms.CharField(widget=forms.Textarea)
    author = forms.CharField()

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

    def save(self):
        data = self.cleaned_data
        comment = Comment(body=data['body'], author=data['author'], user=self.user)
        comment.save()

    def clean(self):
        return self.cleaned_data

你知道吗视图.py你知道吗

@login_required
def create(request):
    try:
        if is_post(request):
            form = CommentCreationForm(request.user)
            if form.is_valid():
                print 'valid'
                form.save()
                return render_to_response("login.html", context_instance = RequestContext(request))
            return render_to_response("login.html", context_instance = RequestContext(request))
        return render_to_response("create.html", {'form':CommentCreationForm()}, context_instance = RequestContext(request))
    except Exception as e:
        print str(e)

如果我提交表单,它将返回:“User”对象没有“get”属性。我肯定我做错了什么,但我不知道是什么。你知道吗


Tags: selfformdatareturnrequestsavedeflogin
1条回答
网友
1楼 · 发布于 2024-10-02 18:25:12

首先,表单初始化不正确,Form.__init__的签名如下所示:

Form.__init__(data=None, files=None, ...)

# When you put
form = CommentCreationForm(request.user)
# The data is feed w/ request.user ...

其次,self.user = kwargs.pop('user', None)总是将self.user设置为None,除非调用代码是:

form = CommentCreationForm(request.POST, user=request.user) 

最后,更好的方法是在某些范围内直接引用request.user,例如:

def make_commment_form_cls(user):

    class CommentCreationForm(forms.Form):
        body = forms.CharField(widget=forms.Textarea)
        author = forms.CharField()

        def save(self):
            data = self.cleaned_data
            # HERE
            comment = Comment(body=data['body'], author=data['author'], user=user)
            comment.save()

    return CommentCreationForm

在创建视图中

# replace 
form = CommentCreationForm(request.user)
# with
form = make_comment_form_cls(request.user)(request.POST)

相关问题 更多 >