crispy_forms.exceptions.CrispyError: | as_crispy_field получил недопустимое или несуществующее поле - PullRequest
0 голосов
/ 07 ноября 2019

Я работаю над приложением 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 tempate

<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>

Этот являетсяссылка, по которой я перешел, чтобы создать форму

[EDIT-1]

Я изменил код в соответствии с ответом, и теперь я получаю следующую ошибку. Пожалуйста, помогите мне
django.template.exceptions.TemplateSyntaxError: Invalid filter: 'as_crispy_field'

1 Ответ

1 голос
/ 07 ноября 2019

вы не передали свою форму в шаблон 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...