【问题标题】:Django validation returns two errors instead of oneDjango 验证返回两个错误而不是一个
【发布时间】:2020-12-05 07:19:42
【问题描述】:

正如问题所述,我在模板中收到两个错误。这是代码

def create(request):

full_content = forms.InputForm()
if request.method == "POST":
    full_content = forms.InputForm(request.POST)
    
    if full_content.is_valid(): 
        title = full_content.cleaned_data["title"]
        content = full_content.cleaned_data["content"] 

        if full_content.clean_title():#Works                
            full_content.create(title, content)
            context= {
                'title' : util.get_page_name(title),
                'entry' : util.get_entry(title),
            }                
            return render(request, "encyclopedia/entry.html",context)           
    
    #From here on its not valid:
    context = {
        'form':full_content
    }
    return render(request, "encyclopedia/create.html", context)      
return render(request, "encyclopedia/create.html", {
    'form':full_content
})

还有forms.clean_title():

def clean_title(self):
    title_name = self.cleaned_data.get("title")
    filename = f'entries/{title_name}.md'
        
    if default_storage.exists(filename):
        raise ValidationError("This title is already taken")

    return title_name

当然还有 create.html:

<h3>Create new entry</h3>
<form action="{% url 'create'%}" method="POST">
    
    {{ form.title.errors }}
    
    {% csrf_token %}
    <table>
        {{form.as_p}}
    </table>
    
    <button type="submit" value="save">Save</button>
</form>

任何想法为什么我得到两颗子弹?:

  • 此标题已被占用
  • 此标题已被占用

【问题讨论】:

  • {{form.as_p}} 包含错误。不需要{{ form.title.errors }}

标签: python html django django-forms django-views


【解决方案1】:

不需要{{ form.title.errors }}{{form.as_p}} 也显示错误。所以删除它。

<h3>Create new entry</h3>
<form action="{% url 'create'%}" method="POST">
    
    {% csrf_token %}
    <table>
        {{form.as_p}}
    </table>
    
    <button type="submit" value="save">Save</button>
</form>

【讨论】:

  • {{form.as_p}}之外的其他方法{{ form.as_table }}会将它们呈现为包裹在标签中的表格单元格{{ form.as_ul }}将呈现它们包裹在
  • 标签中
猜你喜欢
相关资源
最近更新 更多
热门标签