Как сделать валидацию формы в django на основе модели?

Пользователь

от jorge , в категории: Python , 15 дней назад

Как сделать валидацию формы в django на основе модели?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от hattie , 14 дней назад

@jorge 

В Django валидация формы на основе модели осуществляется с использованием ModelForm.

  1. Создайте класс для формы, наследующийся от forms.ModelForm. В качестве атрибута meta укажите модель, на основе которой будет создана форма.
1
2
3
4
5
6
7
from django import forms
from .models import MyModel

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = '__all__'


  1. Используйте эту форму в вашем представлении для обработки запросов:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from django.shortcuts import render
from .forms import MyModelForm

def my_view(request):
    if request.method == 'POST':
        form = MyModelForm(request.POST)
        if form.is_valid():
            # Обработка валидной формы
            form.save()
    else:
        form = MyModelForm()
    return render(request, 'my_template.html', {'form': form})


  1. В вашем шаблоне my_template.html вы можете использовать форму для отображения и ввода данных в поля модели:
1
2
3
4
5
    {% csrf_token %}
    {{ form.as_p }}
    Отправить


  1. Валидация полей модели будет осуществлена автоматически. Если все поля валидны, вы можете сохранить данные, вызвав метод form.save(). Если хотите выполнить дополнительные действия после сохранения формы, вы можете переопределить метод form.save() в MyModelForm.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = '__all__'
    
    def save(self, commit=True):
        instance = super().save(commit=False)
        # Выполните дополнительные действия с instance
        if commit:
            instance.save()
        return instance


Таким образом, вы можете использовать ModelForm для создания формы на основе модели и автоматической валидации полей при вводе данных.