【问题标题】:Django - Save poll selected choices (not number of votes) in different classes of modelsDjango - 在不同类别的模型中保存投票选择的选项(不是票数)
【发布时间】:2015-10-18 00:01:26
【问题描述】:

我在保存不同类别的民意调查选择时遇到了困难。

例如,我创建问题和选择,它们是相互关联的(来自 Django 的教程)。在本教程中,每次参与者选择一个答案时,选择的选项都会保存为投票数(给出的代码:selected_choice.votes += 1)。我想做的不仅仅是保存整个答案,而不仅仅是数字。

这是保存票数的代码:

def vote(request, question_id):
    p = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = p.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        return render(request, 'polls/detail.html', {
            'question': p,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        return HttpResponseRedirect(reverse('polls:results', args=(p.id,)))

我还创建了另一个填充类,它要求参与者在进行投票之前填写一些信息。我想要的是选择的选项也保存在此类模型中。这些图片将描述我要解释的内容。 1s 图片中的红色圆圈是所选选项旨在保存的位置。第二张图片中的红色圆圈是保存的票数。

这是在 CharField 类型中创建的 Q1、Q2、Q3 的代码,用于存储选择的选项。

class Fill(models.Model):
    Q1 = models.CharField(max_length=200, default='')
    Q2 = models.CharField(max_length=200, default='')
    Q3 = models.CharField(max_length=200, default='')

如果有人可以帮助我,我将不胜感激。 谢谢。

P/s:我的一般想法是将选定的选项保存在收集的同一个人数据列表中,以便了解每个人的选择,如第一张图片中所述。所以如果你知道任何其他方法而不是在不同的课程中做,那么请赐教。

【问题讨论】:

    标签: django django-models django-forms django-admin


    【解决方案1】:

    您需要跟踪每个用户(可能使用 request.user)作为模型中的 ForeignKey,并在模型中包含您想要的任何其他字段。这样,每个响应都与用户相关联。

    https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.ForeignKey

    【讨论】:

    • 你能详细解释一下吗?我想知道: 1.如何保存选择的选项,而不是投票数+=1? 2.“在模型中包含您想要的任何其他字段”是什么意思?
    • 我认为您有多个模型,但您可以在一个(或多个)中完成所有这些。如果您想在一个模型中执行此操作,您可以使用我更新的链接将 ForeignKey 字段添加到您的模型中。但是,您需要将其设置为隐藏字段(因此您不在表单中显示它,而是在保存模型之前对其进行更新)。像这样:gist.github.com/exp0nge/99fbc7e534b965313a7b 编辑:如果你想给出可选的选择,你需要把'blank=True'放到模型参数中。其次,如果你使用我所说的方法,那么你就会知道勾选了哪个选项。
    • 我在保存所选选项时遇到问题。如何保存选定的选项,而不是像上面的代码一样保存投票数(selected_choice.votes += 1)?
    • 你为什么不用 ChoiceField 来代替?
    • 谢谢。我尝试使用 ChoiceField。它似乎对我有用。但我现在不能做的是我无法展示我想要的东西。例如,我有 3 个问题,每个问题有 2 个选择。我想展示这些问题和选择,每个问题之间都有不同的图像。像这样,[image1] - 有选择的问题 1 - [image2] - 有选择的问题 2....我尝试同时使用 {{survey.get_location_display }} 和 {{survey.education}} 但它不起作用.你有什么解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多