Как показать все вопросы и ответы на них в Django?

Я сделал эту модель, урлы и т.д., но она не показывает все вопросы/пертаньяны, которые я сделал. Также не сохраняются ответы/джавабан через базу данных. Не знаю, в чем ошибка. Вот мой код :

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_pertanyaans(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})

models.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_pertanyaans, name='get_pertanyaans')
]

urls.py в моем проекте

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

forms.py

from django import forms
from .models import Jawaban

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

Он работает, но отображается вот так: Скриншот веб. Я вроде как новичок в этом django, так что не знаю многого о настройках django

В методе 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})

Создайте запись для success/ URL в файле urls.py приложения для вышеуказанного перенаправления.

Вернуться на верх