首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >crispy_forms.exceptions.CrispyError:|as_crispy_field被传递给一个无效或不存在的字段- models.ForeignKey

crispy_forms.exceptions.CrispyError:|as_crispy_field被传递给一个无效或不存在的字段- models.ForeignKey
EN

Stack Overflow用户
提问于 2022-03-05 12:53:32
回答 1查看 114关注 0票数 1

我正试图为现有模型创建一个前端数据输入页面。但是,当单击链接时,我会得到一个错误:

代码语言:javascript
复制
crispy_forms.exceptions.CrispyError: |as_crispy_field got passed an invalid or inexistent field

为了明确起见,从Django Admin添加数据完全没有问题。

在这里看了几个已回答的问题后,有人强调了我认为可能存在的问题,但这是断章取义的,没有提供太多的解释。

我试图为用户创建一个与外键相对应的前端输入表单。

models.py

代码语言:javascript
复制
class NewHandoff(models.Model):
    handoff_pk = models.AutoField(primary_key=True)
    handoff_date = models.DateField(auto_now_add=True,verbose_name="Handoff Date")
    shift1_pri = models.ForeignKey(Engineer,on_delete=models.CASCADE,verbose_name="Shift 1 Primary")
    shift1_sec = models.ForeignKey(Engineer,on_delete=models.CASCADE,verbose_name="Shift 1 Secondary")

    def __str__(self):
        return f"{self.handoff_date}"
    
    class Meta:
        verbose_name_plural = 'Handoffs'

# New Handoff Form
class NewHandoffForm(forms.ModelForm):
    class Meta:
        model = NewHandoff
        fields = ['shift1_pri','shift1_sec']

views.py

代码语言:javascript
复制
from django.shortcuts import redirect, render
from django.views import View
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http.response import HttpResponse
from django.contrib import messages
from .models import AttentionForm,  NewHandoffForm

# Handoff View Page
class NewHandoffView(LoginRequiredMixin,View):
    def get(self, request):
        greeting = {}
        greeting['heading'] = "New Handoff"
        greeting['pageview'] = "Handoff"
        return render (request,'handoff/handoff-new.html')

    def post(self, request):
        if request.method == "POST":
            if "add-new-handoff-button" in request.POST:
                create_new_handoff_form = NewHandoffForm(request.POST)
                create_new_handoff_form.save()
                return redirect("/handoff/handoff-create")

handoff-new.html

代码语言:javascript
复制
{% extends 'partials/base.html' %}
{% load static %}
{% load humanize %}
{% load crispy_forms_tags %}

{% block extra_css %}
    <link href="{% static 'libs/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css' %}" rel="stylesheet">
{% endblock %}

{% block contents %}
    <div class="row">
        <div class="col-12">
            <div class="card">
                <div class="card-body">
                    <!-- New Form -->
                    <form method="POST">
                        {% csrf_token %}
                        <div class="row">
                            <div class="row-fluid pb-1">
                                <!-- Field 1 -->
                                <div class="mb-3">
                                    {{ form.shift1_pri|as_crispy_field }}
                                </div>
                                <!-- End of Field 1 -->
                            </div>
                        </div>
                        <div class="d-flex flex-wrap gap-2">
                            <button type="submit" class="btn btn-primary waves-effect waves-light" name="add-new-handoff-button">Create New Handoff</button>
                        </div>
                    </form>
                    <!-- End of New Form -->
                </div>
            </div>
        </div>
    </div>
{% endblock %}

{% block extra_javascript %}
{% endblock %}

在另一篇文章中有人提到,表单应该与声明的表单名称{{ form.shift1_mod|as_crispy_field }}相关,所以它实际上应该是{{ create_new_handoff_form.shift1_mod|as_crispy_field }},但是我已经尝试过更改它,但仍然遇到了同样的问题,另外,另一个模型表单只适用于表单,尽管表单的名称是attention_form。

有人知道或能指出正确的方向吗?:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-05 13:16:46

您不会通过模板中的上下文传递表单。在继承View时,适当地在get()和post()方法中添加以下行:

代码语言:javascript
复制
form = NewHandoffForm()

# and then change return
return render(request,'handoff/handoff-new.html', {'form': form })

此外,在get函数中,在呈现后有一个空格。我希望这是一个错误,但不是在您的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71362368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档