Django的crispy-form,表单中的数据不保存在数据库中

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

我刚刚开始与 Django 的冒险。我编写了一个小应用程序,其中当然有一个从用户收集数据的表单。标准版 Django 中的这种形式看起来不太好。我在网上找到了关于crispy-form的信息并将其添加到我的项目中。 我设法创建了一个我喜欢的表单,但有一个问题。我无法将从表单检索到的数据保存到数据库中。以前,当我有一个 Django 表单时,在views.py 文件中,处理该表单的函数将检索到的数据保存到数据库中。现在它已经是酥脆的形式了,我不想保存。 我的知识太少,无法做到这一点,因此我向您寻求帮助。 你能看一下下面的代码并告诉我我做错了什么吗?

forms.py

from django.forms import ModelForm
from crispy_forms.helper import FormHelper

from .models import Firma, DaneKsiegowe
from django import forms
from django.urls import reverse
from crispy_forms.bootstrap import Field, TabHolder, Tab
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Fieldset



class FormNowaFirma(forms.Form):
    nazwa = forms.CharField(required=True, max_length=120)
    typ_ksiegowosc = forms.ChoiceField(
        choices=(("ryczałt ewidencjonowany","ryczałt ewidencjonowany"),("ryczałt ewidencjonowany bez VAT","ryczałt ewidencjonowany bez VAT"),
                 ("KPiR skala podatkowa","KPiR skala podatkowa"),("KPiR skala podatkowa bez VAT","KPiR skala podatkowa bez VAT"),
                 ("KPiR podatek liniowy","KPiR podatek liniowy"),("KPiR podatek liniowy bez VAT","KPiR podatek liniowy bez VAT"),
                 ("pełna księgowość","pełna księgowość"),("pełna księgowość bez VAT","pełna księgowość bez VAT")),
        widget=forms.Select,
        initial='2',
        required=True
    )
    nip = forms.CharField(required=True, max_length=20)
    imie = forms.CharField(max_length=30)
    nazwisko = forms.CharField(max_length=50)
    pesel = forms.CharField(max_length=11)
    ulica = forms.CharField(required=True, max_length=50)
    nr_budynek = forms.CharField(required=True, max_length=4)
    nr_lokal = forms.CharField(max_length=4)
    miasto = forms.CharField(required=True, max_length=50)
    kod_p = forms.CharField(required=True, max_length=6)
    gmina = forms.CharField(required=True, max_length=50)
    powiat = forms.CharField(required=True, max_length=50)
    wojewodztwo = forms.ChoiceField(
        choices=(("Dolnośląskie","Dolnośląskie"), ("Kujawsko-pomorskie","Kujawsko-pomorskie"), ("Lubelskie","Lubelskie"),
                 ("Lubuskie","Lubuskie"),("Łódzkie","Łódzkie"),("Małopolskie","Małopolskie"),("Mazowieckie","Mazowieckie"),
                 ("Opolskie","Opolskie"),("Podkarpackie","Podkarpackie"),("Podlaskie","Podlaskie"),("Pomorskie","Pomorskie"),
                 ("Śląskie","Śląskie"),("Świętokrzyskie","Świętokrzyskie"),("Warmińsko-mazurskie","Warmińsko-mazurskie"),
                 ("Wielkopolskie","Wielkopolskie"),("Zachodniopomorskie","Zachodniopomorskie")),
        widget=forms.Select,
        initial='0',
        required=True
    )
    segregator = forms.CharField(required=True, max_length=3)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_id = 'id_nowa_firma'
        self.helper.form_method = 'post'
        self.helper.form_action = reverse('nowa_firma')
        self.helper.add_input(Submit('submit','Zapisz firmę', css_class='btn-success'))
        self.helper.form_class = 'form-horizontal'
        self.helper.layout = Layout(
            TabHolder(Tab('Dane firmy',
            Fieldset('Dane firmy',
                Field('typ_ksiegowosc', placeholder='Wybierz rodzaj księgowości',css_class="form-control"),
                Field('nazwa', placeholder='Wpisz nazwę firmy',css_class="form-control"),
                Field('segregator', placeholder='Wpisz nr segregatora',css_class="form-control"),
                Field('nip', placeholder='Wpisz NIP firmy',css_class="form-control"),
                Field('imie', placeholder='Wpisz imię włąściciela firmy',css_class="form-control"),
                Field('nazwisko', placeholder='Wpisz nazwisko właściciela firmy',css_class="form-control"),
                Field('pesel', placeholder='Wpisz PESEL właściciela firmy',css_class="form-control"))),
            Tab('Adres',
            Fieldset('Adres firmy',
                     Field('ulica', placeholder='Wpisz ulicę firmy',css_class="some-class"),
                     Field('nr_budynek', placeholder='Wpisz nr budynku firmy',css_class="some-class"),
                     Field('nr_lokal', placeholder='Wpisz nr lokalu firmy',css_class="some-class"),
                     Field('miasto', placeholder='Wpisz miasto firmy',css_class="some-class"),
                     Field('kod_p', placeholder='Wpisz kod pocztowy firmy',css_class="some-class"),
                     Field('gmina', placeholder='Wpisz gminę firmy',css_class="some-class"),
                     Field('powiat', placeholder='Wpisz powiat firmy',css_class="some-class"),
                     Field('wojewodztwo', placeholder='Wpisz województwo firmy',css_class="some-class")))
            )
        )

views.py

from django.shortcuts import render, redirect, get_object_or_404
from .forms import FormDane, FormNowaFirma
from .models import Firma, DaneKsiegowe
from django.template import loader
from django.template.context_processors import csrf
from crispy_forms.utils import render_crispy_form

def nowa_firma(request):
    form_dane = FormNowaFirma(request.POST or None)
    if form_dane.is_valid():
        form_dane.save()
        return redirect(index)

    return render(request, 'form_nowa_firma.html', {'form_nowa_firma':form_dane})

错误报告

/nowa_firma/ 处的属性错误 “FormNowaFirma”对象没有属性“保存” 请求方式:POST 请求网址:http://127.0.0.1:8000/nowa_firma/ Django 版本:5.0.4 异常类型:属性错误 异常值:
“FormNowaFirma”对象没有属性“保存” 异常位置:C:\Users\Marcin\django iuro iuroTax\pulpitBiuro iews.py,第 41 行,在 nowa_firma 提出时间:pulpitBiuro.views.nowa_firma Python 可执行文件:C:\Users\Marcin\django iuro env\Scripts\python.exe Python版本:3.12.2 Python路径:
['C:\Users\Marcin\django iuro iuroTax', 'C:\Users\Marcin\AppData\Local\Programs\Python\Python312\python312.zip', 'C:\Users\Marcin\AppData\Local\Programs\Python\Python312\DLLs', 'C:\Users\Marcin\AppData\Local\Programs\Python\Python312\Lib', 'C:\Users\Marcin\AppData\Local\Programs\Python\Python312', 'C:\Users\Marcin\django iuro env', 'C:\Users\Marcin\django iuro env\Lib\site-packages'] 服务器时间:2024年4月28日星期日 05:36:45 +0000

我的知识太少,无法做到这一点,因此我请求您的帮助。你能看一下下面的代码并告诉我我做错了什么吗?

django django-forms django-crispy-forms
1个回答
0
投票

A

forms.Form
默认没有
save()
功能,只有
forms.ModelForm
有。这是有道理的 - 您可以将 ModelForm 保存到模型数据库表中, - 但是您要将 forms.Form 数据保存到哪里?

如果这曾经有效,我怀疑这是因为您使用的表单是基于模型的表单,切换回来应该会让您朝着正确的方向前进

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