Django形式is_valid在没有括号的情况下工作

时间:2020-06-26 21:55:34

标签: python django

在代码的第6行,我忘记将括号添加到is_valid()中,但是我的代码在没有括号的情况下工作正常。为什么是这样?我仍然可以访问form.cleaned_data。填写表格后,信息将保存到我的数据库中,终端将显示打印功能。 SignUp()是一个ModelForm。

views.py

def signup(request):
    form = SignUp()
    context = {'form': form}
    if request.method == 'POST':
        form = SignUp(request.POST)
        if form.is_valid:
            form.save()
            note = "Thanks {} for joining!".format(form.cleaned_data['firstname'])
            print("Name: {}".format(form.cleaned_data['firstname']))
            print("Age: {}".format(form.cleaned_data['age']))
            return render(request, 'one_app/sign_up.html', {'form': form, 'note': note})

    return render(request, 'one_app/sign_up.html', context)

models.py

class Members(models.Model):

    firstname = models.CharField(max_length=20)
    lastname = models.CharField(max_length=20)
    age = models.SmallIntegerField()
    sex = models.CharField(max_length=10, choices=SEX_CHOICES)
    employeed = models.BooleanField()
    start_date = models.DateField(auto_now_add=True)

    def __str__(self):
        return f"{self.firstname} {self.lastname}"

forms.py

class SignUp(forms.ModelForm):
    class Meta:
        model = Members
        fields = '__all__'
        labels = {
            'firstname': 'First Name:',
            'lastname': 'Last Name:'
        }

2 个答案:

答案 0 :(得分:1)

发生这种情况是因为library(dplyr) f1 <- function(x, y) { x %>% group_by(!!ensym(y)) %>% summarize(col.name = mean(var.name)) } 返回了一个方法。

任何都不同于“无”。

它将始终通过。

尝试一下:

form.is_valid

您会注意到将打印“非空”。

答案 1 :(得分:1)

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

您能够访问form.cleaned_data

的原因

请注意,如果表单尚未通过验证,请致电save()进行验证 通过检查form.errors。如果其中的数据是ValueError 表单无效-也就是说,如果form.errors的评估结果为True

如果您尝试在form.save()语句中省略语句if,则代码将引发错误。

您第一次调用该表格时,数据将被验证 is_valid()或访问错误。


您之所以能够访问form.cleaned_data,是因为在调用form.save()时,它在内部 进行了检查form.errors,以确保获得正确的Model实例
如文档form.cleaned_data中所述,现在可以在调用form.is_valid()或访问form.errors时使用,在这种情况下,在form.save()调用期间访问了表单错误。
希望现在您了解了为什么能够访问form.cleaned_data

https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/#the-save-method