django防止保存空模型

时间:2018-11-21 14:32:44

标签: django-models

有没有一种方法可以在Django中停止模型以保存空模型?

例如我有一个简单的联系表

class Contact(models.Model):

alphabetical = RegexValidator(r'^[a-zA-Z]*$', 'Only alphabetical characters 
are allowed', 'Invalid input')

name = models.CharField(max_length=200, validators=[alphabetical])
email = models.EmailField(validators=[EmailValidator, ])
subject = models.CharField(max_length=200)
message = models.CharField(max_length=250)
created_date = models.DateTimeField(auto_now_add=True)

如何防止保存空模型?例如在Django shell中我可以做

contact = Contact()
contact.save()

这提供了一个保存了所有空白值的模型。

1 个答案:

答案 0 :(得分:0)

要进行验证,您必须使用django.forms。 django表单将管理验证部分:

例如:如果您的model.py是:

class Contact(models.Model):

    name = models.CharField(max_length=200)
    email = models.EmailField()
    subject = models.CharField(max_length=200)
    message = models.CharField(max_length=250)
    created_date = models.DateTimeField(auto_now_add=True)

现在在views.py中创建一个视图:

from django.forms import modelformset_factory
from django.shortcuts import render
from myapp.models import Contact

def manage_contacts(request):
    ContactFormSet = modelformset_factory(Contact, fields=('name', 'email', 'subject', 'message'))
    if request.method == 'POST':
        formset = ContactFormSet(request.POST)
        if formset.is_valid(): # check the validation for blank fields
            formset.save()
            # do something.
    else:
        formset = ContactFormSet()
    return render(request, 'manage_contacts.html', {'formset': formset})

templates/manage_contacts.html中创建模板:

<form method="post">
    {{ formset }}
</form>