I’m extending polls app from official Django tutorial and want to pass Question field question_text along with Choice field choice_text to CreateView generic View, to let the user create a Question along with it’s choices at the same time. Unfortunately I can only pass Question model with question_text to the CreateView
I know CreateView takes only one model so is there a possibility to maybe overwrite it somehow? Question is a foreignKey in a database to the Choice model.
I found some answers using extra_views but i do not want to use some external source to do that
Below my code
Views
class CreateView(LoginRequiredMixin, generic.CreateView):
success_url = reverse_lazy('polls:index')
redirect_field_name = 'accounts:signup'
model = Question
fields = ['question_text']
template_name = 'polls/poll_form.html'
def form_valid(self, form):
form.instance.author = self.request.user
response = super(CreateView, self).form_valid(form)
return response
Models
class Question(models.Model):
question_text = models.CharField(max_length=200)
author = models.ForeignKey(User, default='Default', on_delete=models.CASCADE)
pub_date = models.DateTimeField('date published', default=timezone.now)
def __str__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
Urls
app_name = 'polls'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('new/', views.CreateView.as_view(), name='create'),
path('<int:pk>/', views.DetailView.as_view(), name='detail'),
path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),]