首页 > 解决方案 > 视图 students.views.addgrregister 没有返回 HttpResponse 对象。它返回 None 而不是

问题描述

/students/addgrregister/ 处的 ValueError 我正在尝试在 gr_register 中添加学生,但由于此错误而导致错误代码不起作用我还上传了模板(addgrregister.html),请告诉我这些页面中的问题在哪里

模型.py

class gr_register(models.Model):
Gender_Choices = (
    ('M', 'Male'),
    ('FM', 'Female'),
)
Status_Choices = (
    ('P', 'Present'),
    ('FM', 'Left'),
)
gr_no = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
date_birth = models.DateField(null=True)
classes_A = models.ForeignKey(Classes, on_delete=models.CASCADE, related_name="classes_A", default=1, verbose_name="Class of Admission")
sections_A = models.ForeignKey(Sections, on_delete=models.CASCADE, related_name="sections_A", default=1, verbose_name="Section of Admission")
gender = models.CharField(max_length=10, choices=Gender_Choices)
classes_C = models.ForeignKey(Classes, on_delete=models.CASCADE, related_name="classes_C", verbose_name="Current Class")
sections_C = models.ForeignKey(Sections, on_delete=models.CASCADE, related_name="sections_C", verbose_name="Current Section")
address = models.CharField(max_length=100, null=True, verbose_name="Home Address")
area_code = models.ForeignKey(Area, on_delete=models.CASCADE, verbose_name="Area")
status = models.CharField(max_length=10, choices=Status_Choices, default='P')

class Meta:
    ordering = ('gr_no',)

def __str__(self):
    return self.first_name

视图.py

from django.shortcuts import get_object_or_404, render, redirect
def addgrregister(request):
if request.method == 'POST':
    form = gr_registerForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('home')
else:
    form = gr_registerForm()
    return render(request, 'students/addgrregister.html', {'form': form})

表格.py

from django import forms
from django.forms import ModelChoiceField, ModelForm
from .models import *

class gr_registerForm(ModelForm):
classes_A = forms.ModelChoiceField(queryset=Classes.objects.all())
sections_A = forms.ModelChoiceField(queryset=Sections.objects.all())
classes_C = forms.ModelChoiceField(queryset=Classes.objects.all())
sections_C = forms.ModelChoiceField(queryset=Sections.objects.all())
area_code = forms.ModelChoiceField(queryset=Area.objects.all())

class Meta:
    model = gr_register
    fields = '__all__'

def init (self, *args, **kwargs): forms.ModelForm。初始化(自我,*args,**kwargs)

addgrregister.html

{% extends 'authenticate/base.html' %}
{% block content %}
<div class="container">
    <h4 class="text-center">ADD GR_REGISTER</h4>
    <hr/> 
    <form method="POST" action="{% url 'addgrregister' %}" enctype="multipart/form-data">
        {% csrf_token %}
        {% for field in form %}
        <div class="form-group row">
            <label for="id_{{ field.name }}" class="col-2 col-form-label">{{ field.label }}</label>
            <div class="col-10">
                {{ field }}
            </div>
        </div>
        {% endfor %}
        <button type="submit" class="btn btn-primary" name="button">Add GR_REGISTER</button>
    </form>
 <br/><br/>
</div>  
{% endblock %}

标签: pythondjango

解决方案


表单无效时不返回任何内容。我想你可以这样尝试:

def addgrregister(request):
    form = gr_registerForm(request.POST or None)  # it initates a form. If the request type is POST, then there will be a dict available with posted data in request.POST. If request is not POST, then the form will initiate with empty data.
    if request.method == 'POST':
        if form.is_valid():  # Form valid checks if the submitted form is valid or not. If not, it will store errors in the form. When that form is passed to template, it will show errors in html
            form.save()  # It will store data in DB
            return redirect('home')
    # when for is invalid, it will show the error in the form
    return render(request, 'students/addgrregister.html', {'form': form})

更新

在模板中显示表单错误:

{% for field in form %}
    <div class="form-group row">
        <label for="id_{{ field.name }}" class="col-2 col-form-label">{{ field.label }}</label>
        <div class="col-10">
            {{ field }}
            {{ field.errors }}  // <-- Updated here
        </div>
    </div>
    {% endfor %}

推荐阅读