Разработка веб-приложения для онлайн-анкеты с помощью Django

У меня уже есть сайт на Django, и я хочу загрузить несколько анкет, чтобы мои клиенты могли отвечать на них онлайн. чтобы я мог получать и интерпретировать ответы в панели администратора Django. В каждой анкете есть несколько вопросов, и ответ на каждый вопрос может быть множественным выбором или описательным. Я создал таблицу вопросов в model.py и вопросы будут записаны на сайте через Django admin dashboard. Теперь у меня проблемы с классом UserAnswer в models.py и UserAnswerForm в forms.py, а также с кодами views и Html. Когда я отправляю анкету, ни один элемент не сохраняется в Django admin dashboard.

models.py:

forms.py:

from django.forms import ModelForm
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.forms.widgets import RadioSelect
from django.contrib.auth.models import User
from .models import *
 
class createuserform(UserCreationForm):
    class Meta:
        model=User
        fields=['username','password'] 
 
 
CHOICES=[('op1','گزینه1'),
        ('op2','گزینه2'),
        ('op3','گزینه3'),
        ('op4','گزینه4'),
        ('op5','گزینه5'),
        ('op6','گزینه6'),
        ('op7','گزینه7')]
         
class UserAnswertForm(forms.Form):
    op1 = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
    op2 = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
    op3 = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
    op4 = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
    op5 = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
    op6 = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
    op7 = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
    user_answer = forms.CharField(widget=forms.TextInput())

admin.py:

from django.contrib import admin
from .models import *
 
# Register your models here.

class AssessmentsAdmin(admin.ModelAdmin):
    list_display=['__str__', 'title']
    
    class Meta:
        model = Assessments




class QuestionCategoryAdmin(admin.ModelAdmin):
    list_display=['__str__', 'title']
    
    class Meta:
        model = QuestionCategory




class QuestionAdmin(admin.ModelAdmin):
    list_display=['__str__', 'category', 'assessment']
    
    class Meta:
        model = Question
        


class UserAnswerAdmin(admin.ModelAdmin):
    list_display=['__str__', 'user']
    list_display = ['user', 'assessment', 'is_check']
    list_filter = ['is_check']
    list_editable = ['is_check']
    #search_fields = ['subject', 'text']
        
admin.site.register(Assessments, AssessmentsAdmin)
admin.site.register(QuestionCategory, QuestionCategoryAdmin)
admin.site.register(Question, QuestionAdmin)
admin.site.register(UserAnswer, UserAnswerAdmin)

views.py:

def do_assessment(request, *args, **kwargs):
    assessments = UserAnswertForm(request.POST or None)

    if request.method == "POST" and assessments.is_valid():
        op1 = assessments.cleaned_data.get('op1')
        op2 = assessments.cleaned_data.get('op2')
        op3 = assessments.cleaned_data.get('op3')
        op4 = assessments.cleaned_data.get('op4')
        op5 = assessments.cleaned_data.get('op5')
        op6 = assessments.cleaned_data.get('op6')
        op7 = assessments.cleaned_data.get('op7')
        user_answer = assessments.cleaned_data.get('user_answer')
        UserAnswer.objects.create(op1=op1, op2=op2, op3=op3, op4=op4, op5=op5, op6=op6, op7=op7, user_answer = user_answer, is_check=False)
        # todo : show user a success message
        assessments.save()
        return render(request, 'assessments/question.html', context)
    else:
        assessments = Assessments.objects.all()
        #selected_assessment_id = kwargs['assessmentId']
        #question: Question = Question.objects.get_by_id(selected_question_id)
        questions = Question.objects.all()

        context = {
            'assessments': assessments,
            'questions': questions
        }

        return render(request, 'assessments/question.html', context)

question.html:

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