如何在Django中显示所有问题和答案输入?

问题描述 投票:0回答:1

我制作了这个模型、网址等,但它没有显示我制作的所有问题/pertanyaan。它也没有通过数据库保存答案/jawaban。不知道哪一个有错误。不过,这是我的代码:

views.py

from django.shortcuts import render, redirect
from .models import Pertanyaan
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from .forms import JawabanForm
from django.contrib import messages

@login_required
def get_jawabans(request):
    if request.method == 'POST':
        jawab_form = JawabanForm(instance=request.user, data=request.POST)
        if jawab_form.is_valid():
            jawab_form.save()
            messages.success(request, 'Anda berhasil menjawab kuisioner')
        else:
            messages.error(request, 'Anda gagal menjawab kuisioner')
    else:
        jawab_form = JawabanForm(instance=request.user)
    return render(request, 'survey/kuisioner.html', {'jawab_form':jawab_form})

模型.py

from django.db import models
from django.contrib.auth.models import User

class Kuisioner(models.Model):
    judul = models.CharField(max_length=255)
    alias = models.SlugField(max_length=255, unique=True)

    class Meta:
        ordering = ['judul']

    def __str__(self):
        return self.judul

class Pertanyaan(models.Model):
    kuisioner = models.ForeignKey(Kuisioner, related_name='pertanyaans', on_delete=models.CASCADE)
    pertanyaan = models.CharField(max_length=255)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created']

    def __str__(self):
        return self.pertanyaan

class Jawaban(models.Model):
    pertanyaan = models.ForeignKey(Pertanyaan, related_name='jawabans', on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    jawab = models.PositiveIntegerField()

调查应用程序内的 urls.py

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

urlpatterns = [
    path('kuisioner/', views.get_jawabans, name='get_jawabans')
]

我的项目中的urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('account/', include('account.urls')),
    path('survey/', include('survey.urls')),
]

表格.py

from django import forms
from .models import Jawaban

class JawabanForm(forms.ModelForm):
    class Meta:
        model = Jawaban
        fields = ['pertanyaan', 'jawab']

它正在工作,但它显示如下: Screenshot of the web 我对这个 django 有点陌生,所以我对 django 的设置很了解

编辑: 这是我的 HTML 文件(我忘了发布它)

kuisioner.html

{% extends "base.html" %}
{% block title %}Dashboard{% endblock %}
{% block content %}
{% for pertanyaan in pertanyaans %}
<form action = "{% url 'get_jawabans' %}"method = "post">
    {% csrf_token %}
    {{ jawab_form.as_p }}
    <input type="submit" value="Submit" />
</form>
{% endfor %}
{% endblock %}
python-3.x django django-forms
1个回答
0
投票

在函数的 POST 方法中。您应该使用重定向方法,这样表单就不会发布两次并移动到另一个页面或同一页面。

通过查看您的代码,应该保存数据(您应该检查管理页面以获取保存的数据)。但是,您没有重定向到任何页面,因此它保留在同一页面上。

更新代码如下:

from django.http import HttpResponseRedirect    

@login_required
def get_jawabans(request):
    if request.method == 'POST':
        jawab_form = JawabanForm(instance=request.user, data=request.POST)
        if jawab_form.is_valid():
            jawab_form.save()
            messages.success(request, 'Anda berhasil menjawab kuisioner')
            return HttpResponseRedirect('success/')
        else:
            messages.error(request, 'Anda gagal menjawab kuisioner')
    else:
        jawab_form = JawabanForm(instance=request.user)
    return render(request, 'survey/kuisioner.html', {'jawab_form':jawab_form})

在应用程序 urls.py 文件中为

success/
URL 创建一个条目,用于上述重定向。

© www.soinside.com 2019 - 2024. All rights reserved.