Ошибка при вставке данных в базу данных с помощью Ajax в Django после проверки ModelForm

Я создаю Django ModelForm

Частично работает, если я не валидирую форму, т.е. если я убираю оператор if form.is_valid(): из кода то значения вставляются в базу данных правильно

но если я использую его, то он показывает ошибку в консоли print("Errors ", form_to_insert_data.errors) как:

<ul class="errorlist"><li>name<ul class="errorlist"><li>write name</li></ul></li><li>ini_stg<ul class="errorlist"><li>This field is required.</li></ul></li><li>dev_stg<ul class="errorlist"><li>This field is required.</li></ul></li><li>mid_stg<ul class="errorlist"><li>This field is required.</li></ul></li><li>end_stg<ul class="errorlist"><li>This field is required.</li></ul></li><li>ini_kc<ul class="errorlist"><li>This field is required.</li></ul></li><li>dev_kc<ul class="errorlist"><li>This field is required.</li></ul></li><li>mid_kc<ul class="errorlist"><li>This field is required.</li></ul></li><li>end_kc<ul class="errorlist"><li>This field is required.</li></ul></li><li>root_len<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

Однако, я правильно вставляю все значения в форму, т.е. отметки остаются пустыми.

и если я не передаю print("Errors ", form_to_insert_data.errors), то ошибка выглядит как

Internal Server Error: /url_for_crop_data_to_insert
Traceback (most recent call last):
  File "C:\Python_Abhilash\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Python_Abhilash\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\base.py", line 188, in _get_response
    self.check_response(response, callback)
  File "C:\Python_Abhilash\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\base.py", line 309, in check_response
    raise ValueError(
ValueError: The view waterbalance.views.save_inserted_cropdata didn't return an HttpResponse object. It returned None instead.

Код выглядит следующим образом

Модель

from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator

class CropDetail(models.Model):
    name = models.CharField(max_length=100)
    ini_stg = models.PositiveIntegerField(validators=[MinValueValidator(0.0), MaxValueValidator(100.0)])
    dev_stg = models.PositiveIntegerField(validators=[MinValueValidator(0.0), MaxValueValidator(100.0)])
    mid_stg = models.PositiveIntegerField(validators=[MinValueValidator(0.0), MaxValueValidator(100.0)])
    end_stg = models.PositiveIntegerField(validators=[MinValueValidator(0.0), MaxValueValidator(100.0)])
    ini_kc = models.FloatField(validators=[MinValueValidator(0.0), MaxValueValidator(2.0)])
    dev_kc = models.FloatField(validators=[MinValueValidator(0.0), MaxValueValidator(2.0)])
    mid_kc = models.FloatField(validators=[MinValueValidator(0.0), MaxValueValidator(2.0)])
    end_kc = models.FloatField(validators=[MinValueValidator(0.0), MaxValueValidator(2.0)])
    root_len = models.PositiveIntegerField(validators=[MinValueValidator(0.0), MaxValueValidator(2000)])

View

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth import logout, authenticate, login
from django.contrib import messages
from django.http import JsonResponse
from waterbalance.forms import add_crop_details_to_database
from waterbalance.models import CropDetail

def save_inserted_cropdata(request):
    if request.method == "POST":
        form = add_crop_details_to_database(request.POST)
        print("form", form)
        if form.is_valid():

            CropName = request.POST["CropName"]
            print("CropName", CropName)
            InitialStage = request.POST["InitialStage"]
            DevelopmentStage = request.POST["DevelopmentStage"]
            MidStage = request.POST["MidStage"]
            EndStage = request.POST["EndStage"]
            InitialKc = request.POST["InitialKc"]
            DevelopmentKc = request.POST["DevelopmentKc"]
            MidStageKc = request.POST["MidStageKc"]
            EndStageKc = request.POST["EndStageKc"]
            RootLength = request.POST["RootLength"]

            crop_data_to_pass = CropDetail(name=CropName, ini_stg=InitialStage, dev_stg=DevelopmentStage, mid_stg=MidStage, end_stg=EndStage,ini_kc=InitialKc, dev_kc=DevelopmentKc,  mid_kc=MidStageKc, end_kc=EndStageKc, root_len=RootLength)

            crop_data_to_pass.save()

            return JsonResponse({'status': 'Save'})
        else:
            return JsonResponse({'status': "Failed"})

Форма

from django import forms
from waterbalance.models import CropDetail

class add_crop_details_to_database(forms.ModelForm):
    class Meta:

        model = CropDetail

        fields = ["name", "ini_stg", "dev_stg", "mid_stg", "end_stg", "ini_kc", "dev_kc", "mid_kc", "end_kc", "root_len"]

        labels = {"name":"Crop Name", "ini_stg":"Initial Stage Duration", "dev_stg":"Development Stage Duration", "mid_stg":"Mid-Season Stage Duration", "end_stg":"End-Season Stage Duration", "ini_kc":"Initial Stage Crop Coefficient", "dev_kc":"Development Stage Crop Coefficient", "mid_kc":"Mid-Season Stage Crop Coefficient", "end_kc":"End-Season Stage Crop Coefficient", "root_len":"Root Length (mm)"}

        widgets = {
            "name":forms.TextInput(attrs={"class":"form-control", "id":"name_id"}),
            "ini_stg":forms.TextInput(attrs={"class":"form-control", "id":"ini_stg_id"}),
            "dev_stg":forms.TextInput(attrs={"class":"form-control", "id":"dev_stg_id"}),
            "mid_stg":forms.TextInput(attrs={"class":"form-control", "id":"mid_stg_id"}),
            "end_stg":forms.TextInput(attrs={"class":"form-control", "id":"end_stg_id"}),
            "ini_kc":forms.TextInput(attrs={"class":"form-control", "id":"ini_kc_id"}),
            "dev_kc":forms.TextInput(attrs={"class":"form-control", "id":"dev_kc_id"}),
            "mid_kc":forms.TextInput(attrs={"class":"form-control", "id":"mid_kc_id"}),
            "end_kc":forms.TextInput(attrs={"class":"form-control", "id":"end_kc_id"}),
            "root_len":forms.TextInput(attrs={"class":"form-control", "id":"root_len_id"})
        }

URLs

from django.contrib import admin
from django.urls import path
from waterbalance import views

urlpatterns = [
    path('', views.index, name="index"),
    path('login', views.loginUser, name="login"),
    path('logout', views.logoutUser, name="logout"),
    path('cropdatabase', views.cropdatabase, name='cropdatabase'),
    path('url_for_crop_data_to_insert', views.save_inserted_cropdata, name='url_for_crop_data_to_insert'),
]

HTML

Как вставить значения в базу данных после валидации?

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