首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django POST或GET

Django POST或GET
EN

Stack Overflow用户
提问于 2021-06-24 19:01:37
回答 1查看 72关注 0票数 1

我有一个页面供老师输入学生的分数和注册号。输入后,它被存储在数据库中,学生可以填写一张表格,要求提供for和注册号,并从数据库中获得基于特定注册的分数。

但是当我对学生使用post请求时,它显示表单无效,并显示注册号已经存在。

我的views.py:

代码语言:javascript
运行
复制
from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy
from .models import Mark
from django.contrib.auth.views import LoginView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import FormView
from .forms import ViewResultForm, AddResultForm
from django.contrib import messages



class ViewResultFormView(FormView):
    template_name = 'main/home.html'
    form_class = ViewResultForm
    success_url= 'result'

    def form_valid(self, form):
        global registration_number
        global dob
        registration_number = form.cleaned_data['registration_number']
        dob = form.cleaned_data['dob']
        return super(ViewResultFormView, self).form_valid(form)


class MarkListView(ListView):
    model = Mark
    template_name = "main/result.html"
    context_object_name = 'result'
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['result'] = context['result'].get(registration_number=registration_number, dob=dob)
        return context

class MarkCreateView(LoginRequiredMixin, CreateView):
    model = Mark
    template_name = "main/add.html"
    form_class = AddResultForm

    def form_valid(self, form):

        total_10th = ((form.cleaned_data['class_10_sub_1'] + form.cleaned_data['class_10_sub_2'] + form.cleaned_data['class_10_sub_3'])/300)*30

        total_11th = ((form.cleaned_data['class_11_English'] + form.cleaned_data['class_11_Maths'] +form.cleaned_data['class_11_Physics'] +form.cleaned_data['class_11_Chemistry'] +form.cleaned_data['class_11_Comp_Bio'])/500) * 30

        total_12th = ((form.cleaned_data['class_12_English'] + form.cleaned_data['class_12_Physics'] +form.cleaned_data['class_12_Chemistry'] +form.cleaned_data['class_12_Maths']+ form.cleaned_data['class_12_Comp_Bio'] +  form.cleaned_data['class_12_practicals_Physics'] + form.cleaned_data['class_12_practicals_Chemistry'] + form.cleaned_data['class_12_practicals_Comp_Bio'] )/500)*40
        
        result = total_10th + total_11th + total_12th
        total = form.save(commit=False)
        total.teacher_name = self.request.user
        total.result = result
        total.save()
        message = messages.success(self.request, f'Result added successfully')
        return super().form_valid(form)



class CustomLoginView(LoginView):
    template_name = 'main/login.html'
    fields = '__all__'
    redirect_authenticated_user = True


    def get_success_url(self):
        return reverse_lazy('add')

home.html:

代码语言:javascript
运行
复制
{% extends 'main/base.html' %}
{%load crispy_forms_tags %} 

{% block content %}

<div  class="container mt-5 card shadow p-3 mb-5 bg-white rounded">

        <legend>Enter your credentials</legend>

        <form  method="POST">
        
        {% csrf_token %}
        {{ form | crispy }}


        <input class='btn btn-outline-info' type="submit" value="Submit">
        
        </form>
</div>  

{% endblock content %}

result.html:

代码语言:javascript
运行
复制
{% extends 'main/base.html' %}

{% block content %}

<div class="container">
{{ result.student_name }}
<br>
{{ result.dob }}
<br>
{{ result.result }} %

</div>

{% endblock content %}

因此,一旦老师输入了学生的分数,我就计算结果并将其存储在数据库中。但是bcz老师已经注册了一个特定的注册号,当一个学生试图在表格中输入相同的注册号时,它会显示表单无效。我希望注册号是唯一的。

那么,如果我必须在home.html中使用GET,如何访问表单的值呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-27 00:04:26

您应该重写ViewResultFormView.form_valid,因为您不希望在super调用中调用form.save()。您应该从表单中检索registration_numberdob,然后使用相应学生的成绩填充模板的上下文。

我也不明白那些global黑客是做什么用的?如果您需要存储多个站点页面信息,那么您应该为学生实现自己的身份验证,该身份验证将把他们的身份验证令牌/cookie存储在某个地方,然后使用该身份验证信息来允许/拒绝对某些页面的访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68114503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档