如何处理“|as_crispy_field 传递了无效或不存在的字段”错误消息?

问题描述 投票:0回答:2

我正在制作一个包含几个页面的网络应用程序。在其中一页上,我想要一个看起来像这样的表格

https://i.stack.imgur.com/WsOJ6.jpg

但是我不断收到一条错误消息:

raise CrispyError('|as_crispy_field 传递了一个无效的或 不存在的字段')crispy_forms.exceptions.CrispyError: |as_crispy_field 传递了无效或不存在的字段 [2019年7月10日23:21:12]“获取/year2 HTTP/1.1”500 148042

这是我的year2.html,它似乎是发生错误的地方:


{% extends "HelloDjangoApp/layout.html" %}
{% load crispy_forms_tags %}

**HelloDjangoApp/year2.html**

{% block content %}
  <form method="post" novalidate>
    {% csrf_token %}
    <div class="row">
      <div class="col-6">
        {{ form.name|as_crispy_field }}
      </div>
      <div class="col-6">
        {{ form.email|as_crispy_field }}
      </div>
    </div>
    {{ form.job_title|as_crispy_field }}
    {{ form.bio|as_crispy_field }}
    <button type="submit" class="btn btn-success">Calculate</button>
  </form>
{% endblock %}

对于上下文,这是我的views.py


from django.shortcuts import render
from django.http import HttpResponse
from datetime import datetime
from django.shortcuts import render   # Added for this step
from django.views.generic import CreateView
from .models import Person

class PersonCreateView(CreateView):
    model = Person
    fields = ('name', 'email', 'job_title', 'bio')


def index(request):
    now = datetime.now()

    return render(
        request,
        "HelloDjangoApp/index.html",  # Relative path from the 'templates' folder to the template file
        # "index.html", # Use this code for VS 2017 15.7 and earlier
        {
            'title' : "Exam Results Calculator",
            'message' : "Hello!",
            'content' : " on " + now.strftime("%A, %d %B, %Y at %X"),
        }
    )

def about(request):
    return render(
        request,
        "HelloDjangoApp/about.html",
        {
            'title' : "Simply enter your scores to find out your average",
            'content' : "Example app page for Django."
        }
    )

def year1(request):
    return render(
        request,
        "HelloDjangoApp/year1.html",
        {
            'title' : "1st Year Average",
            'content' : "First Year Stuff"

        }

    )

def year2(request):
    return render(
        request,
        "HelloDjangoApp/year2.html",
        {
            'title' : "2nd Year Average",
            'content' : "Second Year Stuff"

        }

    )


def year3(request):
    return render(
        request,
        "HelloDjangoApp/year3.html",
        {
            'title' : "3rd Year Average",
            'content' : "3rd Year Stuff"

        }

    )

def year4(request):
    return render(
        request,
        "HelloDjangoApp/year4.html",
        {
            'title' : "4th Year Average",
            'content' : "4th Year Stuff"

        }

    )
# Create your views here.


还有我的模型.py

from django.db import models

# Create your models here.
class Person(models.Model):
    name = models.CharField(max_length=130)
    email = models.EmailField(blank=True)
    job_title = models.CharField(max_length=30, blank=True)
    bio = models.TextField(blank=True)

python django django-forms django-templates
2个回答
0
投票

请重新检查您的 CBV - PersonCreateView。 您在year2.html中访问的表单字段不是处理它的视图的表单实例的一部分。要更正此问题, 1)将year2.html模板重命名为Person_form.html 2) 从基于year2函数的视图中删除“HelloDjangoApp/year2.html”。

希望这有帮助,谢谢。


0
投票

您必须在所有功能中

return
render
{'form': form}

这样做:

def year2(request):
    form = Person()
    return render(
        request,
        "HelloDjangoApp/year2.html",
        {
            'form': form
        }

    )
© www.soinside.com 2019 - 2024. All rights reserved.