Python 如何通过登录用户向问题模型添加选项

Python 如何通过登录用户向问题模型添加选项,python,django,Python,Django,我正在学习django,我有一个想法,从django教程修改民意测验应用程序。我想增加注册和登录的可能性,然后我想做一个表单,用户可以创建一个问题并添加选择。首先,我试着从一个角度来看,但我认为会有问题,因为我在不同的模型中有选择和问题。然后我尝试为“createChoice”创建一个vReverse,但没有找到任何参数。尝试了1个模式:['polls\\/(?P[0-9]+)\\/choice$”]视图用于创建问题,另一个用于创建选项,但这里出现了以下错误: 我想就如何做这件事征求一些建议。如

我正在学习django,我有一个想法,从django教程修改民意测验应用程序。我想增加注册和登录的可能性,然后我想做一个表单,用户可以创建一个问题并添加选择。首先,我试着从一个角度来看,但我认为会有问题,因为我在不同的模型中有选择和问题。然后我尝试为“createChoice”创建一个vReverse,但没有找到任何参数。尝试了1个模式:
['polls\\/(?P[0-9]+)\\/choice$”]视图用于创建问题,另一个用于创建选项,但这里出现了以下错误:
我想就如何做这件事征求一些建议。如果我能在一页纸上完成,那就太好了

这是我的密码:

models.py

from django.db import models
from django.utils import timezone
import datetime
from django.contrib import auth
# Create your models here.

User = auth.get_user_model()

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=False)


    def __str__(self):
        return self.question_text

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

class User(auth.models.User, auth.models.PermissionsMixin):

    def __str__(self):
        return "@{}".format(self.username)
url.py

from django.urls import path, include
from django.contrib.auth import views as auth_views
from . import views

app_name = 'pollapp'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('createdPolls/', views.ListView.as_view(), name='createdPolls'),
    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'),
    path('login/', auth_views.LoginView.as_view(template_name='registration/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    path('signup/', views.SignUp.as_view(), name='signup'),
    path('createPoll/', views.CreatePoll.as_view(), name='createPoll'),
    path('<int:pk>/choice', views.CreateChoicePoll.as_view(), name='createChoice')
]
forms.py

class CreatePollForm(forms.ModelForm):

    class Meta:
        model = Question
        fields = ('question_text',)

class CreateChoiceForm(forms.ModelForm):

    class Meta:
        model = Choice
        fields = ('choice_text',)

您需要在视图中为
pk
传递一个值。您可以通过覆盖以下内容来实现:

从django.url反向导入
类CreatePoll(LoginRequiredMixin,generic.CreateView):
form_class=forms.CreatePollForm
模板名称='polls/createPoll.html'
def表单_有效(自身、表单):
self.object=poll=form.save(commit=False)
poll.author=self.request.user
poll.save()
返回super().form_有效(form)
def get_success_url(自我):

返回反向('pollapp:createChoice',kwargs={'pk':self.object.pk})
您需要在视图中传递
pk的值。您可以通过覆盖以下内容来实现:

从django.url反向导入
类CreatePoll(LoginRequiredMixin,generic.CreateView):
form_class=forms.CreatePollForm
模板名称='polls/createPoll.html'
def表单_有效(自身、表单):
self.object=poll=form.save(commit=False)
poll.author=self.request.user
poll.save()
返回super().form_有效(form)
def get_success_url(自我):
返回反向('pollapp:createChoice',kwargs={'pk':self.object.pk})
class CreatePollForm(forms.ModelForm):

    class Meta:
        model = Question
        fields = ('question_text',)

class CreateChoiceForm(forms.ModelForm):

    class Meta:
        model = Choice
        fields = ('choice_text',)
from django.urls import reverse

class CreatePoll(LoginRequiredMixin, generic.CreateView):
    form_class = forms.CreatePollForm
    template_name = 'polls/createPoll.html'

    def form_valid(self, form):
        self.object = poll = form.save(commit=False)
        poll.author = self.request.user
        poll.save()
        return super().form_valid(form)

    def get_success_url(self):
        return reverse('pollapp:createChoice', kwargs={'pk': self.object.pk})