Использование данных URL для заполнения формы в Django с помощью представлений на основе классов

У меня есть 2 модели: Projects и Members, каждая из которых имеет форму. Я смог добавить в URL номер проекта (id) следующим образом:

class PageCreate(CreateView):
    model = Page
    form_class = PageForm
    success_url = reverse_lazy('members:create')
 
    
    def get_success_url(self):
        return reverse_lazy('members:create', args=[self.object.id])

Когда я заканчиваю заполнять форму Проект, она перенаправляет страницу на форму Члена.

Я хочу извлечь ID проекта из URL и использовать его в форме Member. Я не могу придумать другого решения.

В настоящее время у меня есть список выбора для выбора Проекта в форме Члена, но я хочу, чтобы проект загружался сразу после создания.

Я использую CreateView в моделях для проектов и членов. Это представление для MemberCreate

@method_decorator(login_required, name='dispatch')
class MemberCreate(CreateView):
    model = Member
    form_class = MemberForm
    success_url = reverse_lazy('pages:pages')

Единственная попытка визуализировать ID в HTML была с помощью

{{ request.get }}

Чтобы как-то получить значение из GET, но я не смог этого сделать.

Параметры URL

import imp
from django.urls import path
from .views import PageListView, PageDetailView, PageCreate, PageUpdate, PageDelete, MemberCreate, MemberDelete, MemberUpdate

pages_patterns = ([
    path('', PageListView.as_view(), name='pages'),
    path('<int:pk>/<slug:slug>/', PageDetailView.as_view(), name='page'),
    path('create/', PageCreate.as_view(), name='create'),
    path('update/<int:pk>', PageUpdate.as_view(), name='update'),
    path('delete/<int:pk>', PageDelete.as_view(), name='delete'),
], 'pages')

members_patterns = ([
    path('create/<int:pk>', MemberCreate.as_view(), name='create'),
    path('update/<int:pk>', MemberUpdate.as_view(), name='update'),
    path('delete/<int:pk>', MemberDelete.as_view(), name='delete'),
], 'members')

Разбор URL завершается в self.kwargs представлении. From

  return reverse_lazy('members:create', args=[self.object.id])

вы передаете URL, например

path( 'create/<int:project>', MemberCreateView.as_view(), name='create' )

, а в представлении id теперь self.kwargs['project']. (обратите внимание, URL может указывать несколько именованных переменных, разделенных косой чертой, и не ограничивается только одной). Обычно затем используется

project = Project.objects.get( pk = self.kwargs['project'] )

Request.GET - это нечто иное: именно туда отправляется диктант, закодированный как строка запроса. Если ваш клиент предоставляет

http://server/app/foo?bar=27&baz=hello

тогда, когда вы придете в представление, которое обрабатывает app/foo, request.GET содержит

{ 'bar':'27', 'baz':'hello' }

(на самом деле это QueryDict, а не Python dict, что имеет некоторые тонкие различия. Обратитесь к документации Django. Главное отличие в том, что значения, прикрепленные к ключам, могут быть многозначными, для строки запроса типа ?bar=27&bar=54&bar=silly

Вернуться на верх