Как показать все вопросы и ответы на них в 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 приложения для вышеуказанного перенаправления.