Введение

В процессе разработки веб-приложений на Django часто возникает необходимость добавления параметров URL к формам, созданным на основе `forms.ModelForm`. Это может быть нужно для различных целей, таких как сохранение информации о том, какой именно раздел сайта привел пользователя к форме, или передача дополнительных данных, которые будут использоваться при обработке формы.

Подготовка проекта и модели

Прежде чем приступить к добавлению параметров URL к формам, давайте создадим простой проект Django и модель, на основе которой будет создана форма.
  1. Создаем новый проект и приложение:
django-admin startproject myprojectcd myprojectpython manage.py startapp myapp
  1. Определяем простую модель в файле `myapp/models.py`:
from django.db import modelsclass MyModel(models.Model):    name = models.CharField(max_length=100)    description = models.TextField()
  1. Применяем миграции:
python manage.py makemigrationspython manage.py migrate

Создание формы на основе ModelForm

Далее, создадим форму на основе `forms.ModelForm`. В файле `myapp/forms.py` напишем:
from django import formsfrom .models import MyModelclass MyModelForm(forms.ModelForm):    class Meta:        model = MyModel        fields = ('name', 'description')

Добавление URL-параметра к форме

Теперь, чтобы добавить параметр URL к форме, мы можем использовать словарь `initial` при создании формы в представлении.

Пример представления

В файле `myapp/views.py` создадим представление, которое будет обрабатывать запрос:
from django.shortcuts import render, redirectfrom .forms import MyModelFormdef my_view(request):    url_param = request.GET.get('url_param', 'default_value')        if request.method == 'POST':        form = MyModelForm(request.POST)        if form.is_valid():            obj = form.save()            return redirect('success_url')    else:        form = MyModelForm(initial={'url_param': url_param})        context = {        'form': form,        'url_param': url_param,    }        return render(request, 'my_template.html', context)

Пример HTML-шаблона

В HTML-шаблоне (`my_template.html`) мы можем использовать переданный параметр:
<!DOCTYPE html><html><head>    <title>Пример</title></head><body>    <h1>Переданный параметр: {{ url_param }}</h1>    <form method="post">        {% csrf_token %}        {{ form.as_p }}        <button type="submit">Отправить</button>    </form></body></html>

Заключение

В этой статье мы рассмотрели, как добавить параметр URL к объекту `forms.ModelForm` и передать его в HTML-шаблон для дальнейшего использования. Этот подход может быть полезен при разработке сложных веб-приложений на Django, когда необходимо сохранять дополнительную информацию о контексте, в котором была вызвана форма.