【问题标题】:crispy_forms.exceptions.CrispyError: |as_crispy_field got passed an invalid or inexistent fieldKrispy_forms.exceptions.CrispyError: |as_crispy_field 传递了一个无效或不存在的字段
【发布时间】:2020-03-03 17:17:20
【问题描述】:

我正在开发一个 django 应用程序。在应用程序中有一个贡献形式。我用 django 模型和 django 表单创建了表单。但是当我尝试运行应用程序时,出现以下错误。

crispy_forms.exceptions.CrispyError: |as_crispy_field got passed an invalid or inexistent field

我不确定我做错了什么。

django models.py


CONTRIBUTE_CHOICE = (
    ('Books', 'Books'),
    ('Renovation', 'Renovation'),
    ('Other', 'Other'),
    )

class Contribute(models.Model):
    firstName = models.CharField(max_length=50)
    lastName = models.CharField(max_length=50)
    email = models.EmailField(max_length=100)
    contribution = models.CharField(max_length=100, choices=CONTRIBUTE_CHOICE)

    def publish(self):
        self.save()

    def __str__(self):
        return self.firstName

django forms.py

from .models import Contribute

CONTRIBUTE_CHOICE = (
    ('Books', 'Books'),
    ('Renovation', 'Renovation'),
    ('Other', 'Other'),
    )

class ContributeForm(forms.ModelForm):

    contribution = forms.ChoiceField(choices=CONTRIBUTE_CHOICE, required=True )

    class Meta:
        model = Contribute

        widgets = {
            'firstName': forms.TextInput(attrs={'placeholder': 'First Name'}),
            'lastName': forms.TextInput(attrs={'placeholder': 'Last Name'}),
            'email': forms.TextInput(attrs={'placeholder': 'Email'}),
        }
        fields = ('firstName', 'lastName', 'email', 'contribution')

django views.py

from .forms import ContributeForm

def donate(request):
    if request.method == "POST":
        contributeForm = ContributeForm(request.POST)

        if contributeForm.is_valid():
            post = contributeForm.save(commit=False)
            post.save()
            return redirect('home')

    else:
        contributeForm = ContributeForm()
        context = {'contributeForm': contributeForm}
        return render(request, 'donate.html', context)

donate.html 模板

<form class='contribution_form' method="post">
    {% csrf_token %}
    <div class="row">
        <div class="col">
            {{ contributeForm.firstName|as_crispy_field }}
        </div>
        <div class="col">
            {{ contributeForm.lastName|as_crispy_field }}
        </div>
    </div>
    {{ contributeForm.email|as_crispy_field }}
    {{ contributeForm.contribution|as_crispy_field }}
    <button type="submit" class="btn btn-lg">Submit</button>
</form>

This 是我创建表单的链接

[EDIT-1]

我根据答案更改了代码,现在出现以下错误。请帮我
django.template.exceptions.TemplateSyntaxError: Invalid filter: 'as_crispy_field'

【问题讨论】:

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


    【解决方案1】:

    您的表格名称是:

    贡献表单

    在你写的模板中:

    贡献表单

    是按键敏感的问题

    【讨论】:

      【解决方案2】:

      我收到了同样的错误信息。这是一个 ForeignKey 类型的变量/表单字段,它应该提供选择,导致了问题。

      【讨论】:

        【解决方案3】:

        您没有将表单传递给 donate.html 模板:

        def donate(request):
          if request.method == "POST":
               contributeForm = ContributeForm(request.POST)
        
               if contributeForm.is_valid():
                  post = contributeForm.save(commit=False)
                  post.save()
                  return redirect('home')
               else:
               # this should be include if form validate failed
                  return render(request, 'donate.html', {'contributeForm': contributeForm})
        
          elif request.method == "GET":
               contributeForm = ContributeForm()
               context = {'contributeForm': contributeForm}
               # return render(request, 'index.html', context) <-- why do you have this here?
               return render(request, 'donate.html', context)
        

        【讨论】:

        • 嗨!我复制了捐赠视图的索引视图。忘记更改代码的红色部分。我做了 chage 并摆脱了那个错误。现在我收到此错误django.template.exceptions.TemplateSyntaxError: Invalid filter: 'as_crispy_field' 我还编辑了问题
        • 来自this,您需要先在模板中加载脆皮表单,并在模板顶部添加{% load crispy_forms_tags %}
        • 很高兴能帮到你
        猜你喜欢
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        • 2019-11-20
        • 2021-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多