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