Reputation: 2115
class Event(models.Model):
...
class Question(models.Model):
event = models.ForeignKey(Event)
And I have url pattern like /events/(?P<event_id>\d+)/question/add/$
bound to QuestionCreateView
QuestionCreateView(CreateView):
model = Question
form_class = QuestionForm
def form_valid(self, form):
form.instance.event = [???]
return super(QuestionCreateView, self).form_valid(form)
What I'd like to get:
event_id
like /events/9999999/objects/add/
Event
instance from url's event_id
and populate my new Question
instance before savingIs it possible with class-based views? It looks like some crazy mix of DetailView
for Event
and CreateView
for Question
.
Upvotes: 1
Views: 810
Reputation: 45595
Url keyword arguments are available in the view as self.kwargs
:
from django.shortcuts import get_object_or_404
class QuestionCreateView(CreateView):
model = Question
form_class = QuestionForm
def form_valid(self, form):
form.instance.event = get_object_or_404(Event,
pk=self.kwargs['event_id'])
return super(QuestionCreateView, self).form_valid(form)
Upvotes: 3