【问题标题】:Overridden clean function not being called未调用覆盖的清理函数
【发布时间】:2019-02-25 11:30:31
【问题描述】:

文档说(我已经这样做了)

clean_() 方法在表单子类上调用 - 其中 替换为表单字段属性的名称。

接下来它告诉我我应该这样做(我相信我已经这样做了)

您需要在 self.cleaned_data 中查找该字段的值

我的表格

class CreatePostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = (
            'title', 'text', 
        )

        def clean_text(self):
            data = self.cleaned_data['text']
            print(data)

            #check if word count is <30
            if len(data.split()) < 30:
                raise forms.ValidationError(('Please write at least 30 words,\
                                    %(count)s words is not long enough'), params={'count':count})
            return data

我的观点

@login_required
def create_new_post(request):
    if request.method == 'POST':
        form = CreatePostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            post.created = timezone.now()
            post.save()
            return redirect('post-detail', pk=post.pk)
    else:
        form = CreatePostForm()
    return render(request, 'journal/create_post.html', {'form':form})

所以我尝试打印以查看该函数是否被调用,但控制台中没有打印任何内容。

谁能解释我做错了什么?为什么会这样?

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    您的缩进不正确。目前,clean_textMeta 类的一个方法。

    class CreatePostForm(forms.ModelForm):
        class Meta:
            model = Post
            fields = (
                'title', 'text', 
            )
    
            def clean_text(self):
                ...
    

    它应该与Meta 类在相同级别缩进:

    class CreatePostForm(forms.ModelForm):
        class Meta:
            model = Post
            fields = (
                'title', 'text', 
            )
    
        def clean_text(self):
            ...
    

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多