Для создания одной формы, которая может использоваться для разных моделей в Django, вы можете воспользоваться возможностями Django Forms и Django моделей.
- Создайте класс формы, который будет наследоваться от
django.forms.ModelForm
. Этот класс предоставляет уже готовые инструменты для работы с модельными формами.
from django import forms class MyForm(forms.ModelForm): class Meta: model = MyModel fields = '__all__'
- Важно указать
model
, который будет использоваться в форме, а такжеfields
, которые будут отображаться в форме. В данном примере указывается'__all__'
, чтобы включить все поля модели. Вы также можете указывать конкретные поля модели, которые необходимо использовать в форме.
- Далее, вы можете использовать эту форму во ваших представлениях с различными моделями.
from django.shortcuts import render from .models import Model1, Model2 from .forms import MyForm def my_view(request): if request.method == 'POST': form = MyForm(request.POST) if form.is_valid(): form.save() else: form = MyForm() return render(request, 'my_template.html', {'form': form})
- Обратите внимание, что вы должны импортировать ранее созданную форму
MyForm
из файлаforms.py
, а также модели, которые вы хотите использовать с этой формой.
- В представлениях, в случае метода
POST
, вы создаете экземпляр формы, передавая POST данные. Затем проверяете валидность формы и сохраняете данные.
- В случае метода
GET
, создается пустая форма и передается в контекст шаблона для отображения.
- В шаблоне (
my_template.html
), вы можете использовать форму с помощью тега формы Django.
<form method="post" action="{% url 'your_view_name' %}"> {% csrf_token %} {{ form.as_p }} <button type="submit">Отправить</button> </form>
- Важно добавить
{% csrf_token %}
, чтобы обеспечить безопасность формы.
Надеюсь, это подробное объяснение поможет вам понять, как сделать одну форму для разных моделей в Django.