【发布时间】:2013-12-24 13:35:42
【问题描述】:
嗬嗬嗬!
以下问题的最佳解决方案是什么?
我有一个部分模型,其中包含许多问题模型,其中包含几个选择模型:
class Section(models.Model):
section_text = models.CharField(max_length=255)
section_description = models.TextField(blank=False)
slug = models.SlugField(unique=True, null=True)
def __unicode__(self):
return self.section_text
def save(self, *args, **kwargs):
self.slug = slugify(self.section_text)
super(Section, self).save(*args, **kwargs)
class Question(models.Model):
section = models.ForeignKey(Section)
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question_text
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
ModelForm 保持简单,因为我只想编辑投票数:
class ChoiceForm(ModelForm):
class Meta:
model = Choice
fields = ['votes']
不确定我是否应该在 url 中传递 pk、question_id 或 slug:
url(
#regex=r'^(?P<question_id>\d+)/$',
#regex=r'^(?P<slug>[-\w]+)/$',
regex=r'^vote/$',
view=vote,
name='vote'
),
在 HTML 中,我显示属于某个部分的所有问题 + 选项(通过 question_list):
{% if question_list %}
<form action="{% url 'polls:vote' %}" method="post">
{% for question in question_list %}
<fieldset>
<legend>{{ question.question_text }}</legend>
{% csrf_token %}
{% for choice in question.choice_set.all %}
<input type="radio" name="{{ question.id }}" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
{% endfor %}
</fieldset>
{% endfor %}
<input class="button small" type="submit" value="Weiter" />
</form>
{% endif %}
最后是视图。这里我不确定我在做什么圣诞树:
class SectionOverview(ListView):
model = Section
context_object_name = 'section_list'
template_name = 'itbarometer/umfrage.html'
def vote(request):
if request.method == 'POST':
form = ChoiceForm(request.POST)
if form.is_valid():
f.save()
return HttpResponseRedirect('polls:thanks')
else:
form = ChoiceForm()
return render(request, 'polls:detail', {'form': form,})
我基本上想要完成的是将所有用户输入(用户必须检查所有单选按钮 - 可能是稍后的多项选择和文本字段)保存到数据库。
它现在所做的只是将我重定向到一个空白页面 /vote/
我错过了什么?
圣诞快乐!
【问题讨论】:
标签: django django-views django-forms