Как сделать одну форму для разных моделей Django?

Для создания одной формы, которая может использоваться для разных моделей в Django, вы можете воспользоваться возможностями Django Forms и Django моделей.

1. Создайте класс формы, который будет наследоваться от django.forms.ModelForm. Этот класс предоставляет уже готовые инструменты для работы с модельными формами.

from django import forms

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

2. Важно указать model, который будет использоваться в форме, а также fields, которые будут отображаться в форме. В данном примере указывается '__all__', чтобы включить все поля модели. Вы также можете указывать конкретные поля модели, которые необходимо использовать в форме.

3. Далее, вы можете использовать эту форму во ваших представлениях с различными моделями.

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})

4. Обратите внимание, что вы должны импортировать ранее созданную форму MyForm из файла forms.py, а также модели, которые вы хотите использовать с этой формой.

5. В представлениях, в случае метода POST, вы создаете экземпляр формы, передавая POST данные. Затем проверяете валидность формы и сохраняете данные.

6. В случае метода GET, создается пустая форма и передается в контекст шаблона для отображения.

7. В шаблоне (my_template.html), вы можете использовать форму с помощью тега формы Django.

<form method="post" action="{% url 'your_view_name' %}">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Отправить</button>
</form>

8. Важно добавить {% csrf_token %}, чтобы обеспечить безопасность формы.

Надеюсь, это подробное объяснение поможет вам понять, как сделать одну форму для разных моделей в Django.