dmzkrsk
dmzkrsk

Reputation: 2115

Set ForeignKey value from url parameter in Django's CreateView

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:

Is it possible with class-based views? It looks like some crazy mix of DetailView for Event and CreateView for Question.

Upvotes: 1

Views: 810

Answers (1)

catavaran
catavaran

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

Related Questions