У меня есть представление на основе классов, которое должно принять отправку формы.Я пытаюсь автоматически заполнить некоторые поля формы, используя первичный ключ в пути URL (например, / main / video / play / 135).Представление на основе классов основано на FormView, код, который у меня есть, делает pk доступным в контексте, если я использую TemplateView, но это не особенно хорошо для обработки форм.
urls.py
app_name = 'main'
urlpatterns = [
#path('', views.index, name='index'),
path('video/<int:pk>', views.VideoDetailView.as_view(), name='detail'),
path('video/preview/<int:pk>', views.VideoPreview.as_view(), name='preview'),
path('player', views.PlayerListView.as_view(), name='player_list'),
path('video/play/<int:pk>/', views.VideoPlayView.as_view(), name='play'),
path('', views.VideoListView.as_view(), name="video_list")
]
Соответствующий класс из views.py:
class VideoPlayView(FormView):
template_name = "main/video_play.html"
form_class = VideoPlayForm
initial = {}
http_method_names = ['get', 'post']
def get_initial(self, **kwargs):
initial = super().get_initial()
#initial['video'] = pk
initial['watch_date'] = datetime.date.today()
return initial
def get_context_data(self, **kwargs):
kc = kwargs.copy()
context = super().get_context_data(**kwargs)
video = Video.objects.get(context['pk'])
context['video'] = video
context['test'] = kc
self.initial['video'] = video.pk
context['viewers'] = Viewer.objects.all()
context['players'] = Player.objects.filter(ready=True)
return context
def form_valid(self, form):
return HttpResponse("Done")
Я получаю ключевую ошибку в строке:
video = Video.objects.get(context['pk'])
Просмотр отладочной информации на странице ошибки указывает, что контекст нев нем хранится значение pk.
Если я изменяю базовый класс на TemplateView с FormMixin, я не получаю эту ключевую ошибку (но у меня возникают проблемы с размещением данных формы), поэтому я знаю, чтоКод в основном хорошо.Насколько я понимаю, класс FormView должен заполнять контекст таким же образом, как и класс TemplateView.
Любая идея, почему FormView ведет себя так и как я могу заставить это работать?