【问题标题】:Django: is_valid() method is always return false when use with ModelFormDjango:与 ModelForm 一起使用时,is_valid() 方法总是返回 false
【发布时间】:2020-07-08 01:56:14
【问题描述】:

is_valid() 当我在 forms.py 中使用 forms.ModelForm 创建表单时,is_valid() 方法总是返回 false,这样我就可以保存从用户输入的表单获取的所有值。此代码适用于 forms.Form 但是不是forms.ModelForm

forms.py

from django import forms
from .models import student

class student_data(forms.ModelForm):
    name=forms.CharField(widget=forms.TextInput,max_length=20)
    id=forms.IntegerField()
    address=forms.CharField(widget=forms.TextInput,max_length=50)

    class Meta():
        model=student
        fields=['name','stu_id','address']

这里是models.py

from django.db import models

# Create your models here.

class student(models.Model):
    name=models.CharField(max_length=20)
    stu_id=models.IntegerField()
    address=models.CharField(max_length=60)

    class Meta:
        db_table='student'

这里是views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import student
from .forms import student_data

def my_data(request):
    stu1_name=''
    stu2_name=''
    stu_name=''
    myform=student_data(request.POST)
    if (request.method=="POST" and myform.is_valid()):
        stu_name=myform.cleaned_data['name']
        stu1_name=myform.cleaned_data['id']
        stu2_name=myform.cleaned_data['address']
        myform.save()
    else:
        myform=student_data
    return render(request,'show.html',{'student':stu_name,'id':stu1_name,'address':stu2_name})

表单的html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>
        <form name="form" action="/payment/show/" method="POST">
            {% csrf_token %}
            {{form.as_p}}
            <button type="submit">Add Me</button>
        </form>
    </div>
</body>
</html>

【问题讨论】:

    标签: python django forms modelform


    【解决方案1】:

    如下更改您的代码并尝试

    def my_data(request):
        if request.method == "POST":
            myform = student_data(request.POST)
            if myform.is_valid():
                myform.save()
                return redirect('/')
        else:
            myform = student_data()
        return render(request, '----.html', {'myform': myform})
    

    【讨论】:

    • 谢谢你,现在我的代码正在运行,但是表单正在创建一个名为 id 为什么的额外输入标签?现在我知道如果我们想使用 modelform,我们需要重定向用户谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多