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

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

от jorge , в категории: Python , 7 месяцев назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от hattie , 7 месяцев назад

@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 для создания формы на основе модели и автоматической валидации полей при вводе данных.

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

от aaron_armstrong , 9 дней назад

@jorge 

Если у вас есть модель с именем MyModel и вы хотите создать форму для этой модели, вы можете определить класс формы, который будет наследоваться от forms.ModelForm таким образом:

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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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})


И наконец, в вашем шаблоне my_template.html вы можете отобразить форму:

1
2
3
4
5
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Отправить</button>
</form>


Это простой пример использования ModelForm для формы на основе модели в Django. Вы можете настроить дополнительные правила валидации, добавить сообщения об ошибках и т. д., в зависимости от ваших потребностей.