首页 > 解决方案 > 进行一项调查,告诉用户他们的大学专业匹配。使用 django 和 python

问题描述

首先,我正在做的项目应该给用户一个多项选择测验/调查,让他们知道什么大学专业最适合他们,并根据他/她选择的答案。我的问题主要是如何将答案和专业联系起来,以便在用户完成专业时选择。如果在理解我试图解释的内容时有任何问题,请告诉我。欢迎所有建议和批评我真的想在我的编程中变得更好。我基本上是想让我的程序在链接中执行此操作。 https://www.luc.edu/undergrad/academiclife/whatsmymajorquiz/

class User(models.Model):
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=25)
    #password = models.CharField(max_length=25)
    email = models.EmailField(max_length=10)

class Quiz(models.Model):
    name = models.CharField(max_length=200)
    NOQ = models.IntegerField(default=1)
   
    

    class Meta:
        verbose_name = "Quiz"
        verbose_name_plural = "Quizzes"
    
    def __str__(self):
        return self.name
    #number Of Questions
class Major(models.Model):  
    major = models.CharField(max_length=200)
    majorData = models.IntegerField(default=0)
    def __str__(self):
        return self.major

class Question(models.Model):
    question_text = models.CharField(max_length=400)
    quiz = models.ForeignKey("Quiz", on_delete=models.CASCADE, null=True)

    def __str__(self):
        return self.question_text


class Answer(models.Model):
    question = models.ForeignKey('Question', on_delete=models.CASCADE, null=True)
    answer_text = models.CharField(max_length=200)


    def __str__(self):
         return self.answer_text

class QuizTaker(models.Model):
    user = models.ForeignKey("User", on_delete=models.CASCADE)
    quiz = models.ForeignKey("Quiz", on_delete=models.CASCADE)
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.user

视图.py

def index(request):
    return render(request,"JSUMA/JSUMA.html",)
def register(response):
    if response.method == "POST":
        form = RegisterForm(response.POST)
        if form.is_valid():
            form.save()

        return redirect("/JSUMA/")
    else:
        form = RegisterForm()

    return render(response, "register/register.html", {"form":form})

def contactview(request):
    name=''
    email=''
    comment=''

    form= ContactForm(request.POST or None)
    if form.is_valid():
        name= form.cleaned_data.get("name")
        email= form.cleaned_data.get("email")
        comment= form.cleaned_data.get("comment")

        if request.user.is_authenticated():
            subject= str(request.user) + "'s Comment"
        else:
            subject="A Visitor's Comment"
        
        comment= name + "with the email," + email + ",sent the following message:\n\n" + comment
        send_mail(subject, comment, '', [email])

        context={'form': form}
        return render(request, '/contact/contact.html', context)

    else:
        context= {'form': form}
        return render(request, 'contact/contact.html', context)

class QuizView(generic.DetailView):
    model = Question
    template_name = 'JSUMA/quiz.html'
    def get_queryset(self):
        return Question.objects

class ResultsView(generic.DetailView):
    model = Question
    template_name = 'JSUMA/results.html'

def choice(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['answer'])
    except (KeyError, Answer.DoesNotExist):

        return render(request, 'JSUMA/quiz.html', {'question' : question,
            'error_message' : "You didn't select an answer",})
    else:
        selected_choice.major_data += 1
        selected_choice.save()

        return HttpResponseRedirect(reverse('JSUMA:results', args=question.id))

管理员.py

 class AnswerInline(admin.TabularInline):
    model = Answer
    extra = 3
    max_num = 4

class QuestionInline(admin.TabularInline):
    model = Question
    inlines = [AnswerInline]
    extra = 19


class QuestionAdmin(admin.ModelAdmin):
    
    inlines = [AnswerInline]


    

class QuizAdmin(admin.ModelAdmin):
    inlines = [QuestionInline]



admin.site.register(Question, QuestionAdmin)
admin.site.register(Answer)
admin.site.register(Major)
admin.site.register(Quiz, QuizAdmin)

此外,我第一次真正对网站、数据库等做任何事情。代码看起来也有点奇怪(尤其是在视图中)b/c 我试图整合来自另一个项目的代码来提供帮助。在contactForm 视图之后,我开始尝试。我会继续尝试自己解决这个问题,但随着我的最后期限临近,这是我能想到的唯一寻求帮助的选择。

管理页面

管理页面 Pt2。

标签: pythondjangosurvey

解决方案


推荐阅读