django предотвращает сохранение пустой модели - PullRequest
0 голосов
/ 21 ноября 2018

Есть ли способ остановить модель в 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 я могу сделать

contact = Contact()
contact.save()

Это дает модель со всеми сохраненными пустыми значениями.

1 Ответ

0 голосов
/ 21 ноября 2018

для проверки вы должны использовать 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>
...