【问题标题】:Django form not saving data to database with custom formDjango表单不使用自定义表单将数据保存到数据库
【发布时间】:2020-09-10 06:37:31
【问题描述】:

我尝试为用户创建一个停车场表单,该表单将输入他们的 RFID 卡、他们的日志历史记录、车牌、姓名以及是否处于活动状态,但我无法获取 Django 表单以将其保存到数据库

这是我的models.py

from django.db import models

class data(models.Model):
    RFID = models.CharField(max_length=10)
    Name = models.CharField(max_length=10)
    Log = models.TextField()
    License_Plate = models.CharField(max_length=10)
    Active = models.BooleanField(default=True) 

我的forms.py

from django import forms

from .models import data  # import data from models.py


class data_form(forms.ModelForm):
    class Meta:
        model = data
        fields = ['RFID',
                  'Name', 'Log', 'License_Plate', 'Active']

class data_custom_form(forms.Form):
    RFID = forms.CharField(
        widget=forms.TextInput(attrs={'id': 'user-rfid'}),
    )
    Name = forms.CharField(widget=forms.TextInput(
        attrs={'id': 'user-name',
               'cols': 40,
               'rows': 1
               }))
    Log = forms.CharField(
       widget=forms.TextInput(attrs={'id': 'user-log'})
    License_Plate = forms.DecimalField()
    Active = forms.BooleanField()

我的views.py

from django.shortcuts import render

# Create your views here.
from .models import data
from .forms import data_custom_form


def custom_form_view(request):
    custom_form = data_custom_form()
    if request.method == 'POST':
        custom_form = data_custom_form(request.POST)
        if custom_form.is_valid():
            print(custom_form.cleaned_data)
        else:
            print(custom_form.errors)
    info = {
        'form': custom_form
    }
    return render(request, 'parking.html', info)

还有我的模板

<DOCTYPE html>
    <html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>parking</title>
    </head>

    <body>
        <form method="POST">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="save">
        </form>
    </body>

    </html>

当我检查数据库时,它没有保存到数据库中,但是当我检查 shell 时,它准确地打印出我输入的内容 但如果我使用data_form 并像这样编辑views.py

def custom_form(request):
    custom_form = data_form(request.POST or None)
    if custom_form.is_valid():
        custom_form.save()
        custom_form = data_form()
    info = {
        'form': custom_form
    }
    return render(request, 'parking.html', info)

它保存到数据库中。任何帮助都会很棒

【问题讨论】:

    标签: django


    【解决方案1】:

    FormModelForm 背后的想法是不同的。 Form 对象没有 save()ModelForm 对象有。

    每个 ModelForm 也有一个 save() 方法。此方法从绑定到表单的数据中创建并保存一个数据库对象。

    对于Form,您必须创建相应的模型对象并改为调用save()

    def custom_form_view(request):
        custom_form = data_custom_form()
        if request.method == 'POST':
            custom_form = data_custom_form(request.POST)
            if custom_form.is_valid():
                print(custom_form.cleaned_data)
                obj = data(
                    RFID = custom_form.cleaned_data['RFID'],
                    Name = custom_form.cleaned_data['Name'],
                    Log = custom_form.cleaned_data['Log'],
                    License_Plate = custom_form.cleaned_data['License_Plate'],
                    Active = custom_form.cleaned_data['Active']
                )
                obj.save()
            else:
                print(custom_form.errors)
        info = {
            'form': custom_form
        }
        return render(request, 'parking.html', info)
    

    这里data_form()继承自ModelFromdata_custom_form()继承自Form。这意味着 data_form() 对象具有 save()data_custom_form() 没有。因此,当using data_custom_form()(在您的情况下)或使用Form 时,必须创建相应的模型对象(这里是data())为字段分配值并save()

    【讨论】:

    • 谢谢,伙计我现在明白了,你帮我学习新东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2016-10-15
    • 1970-01-01
    • 2019-01-22
    • 2020-02-16
    • 1970-01-01
    • 2018-01-22
    相关资源
    最近更新 更多