Форма Django не отображается при изменении метода запроса (request.method) с GET на POST

Я создаю форму, но когда я меняю request.method == 'GET' на request.method == 'POST', моя форма не открывается, когда я ввожу ее ссылку. Также, когда я использую 'GET', данные формы не сохраняются. Пожалуйста, помогите мне решить эту проблему. Вот соответствующие файлы:

models.py

    from django.db import models
    
    
    # Create your models here.
    
    
    class GrpDetails(models.Model):
        year = models.IntegerField(default='')
        branch = models.CharField(max_length=30)
        group = models.IntegerField(default='')
        session = models.DateTimeField()
        sem = models.IntegerField(default='')
        subject = models.CharField(max_length=50)
        stu_list = models.FileField(upload_to='documents/')

views.py

    from django.shortcuts import render, redirect, HttpResponse
    from django.contrib.auth.models import User, auth
    from django.contrib import messages
    import csv
    from django.contrib.auth.decorators import login_required
    from .forms import GrpDetailsForm
    from .models import GrpDetails
    
    
    # Create your views here.
    def login(request):
        if request.method == 'POST':
            username = request.POST['username']
            password = request.POST['password']
    
            user = auth.authenticate(username=username, password=password)
            if user is not None:
                auth.login(request, user)
                return redirect('dashboard')
            else:
                messages.info(request, 'Username or password are invalid!')
                return redirect('login')
    
        else:
            return render(request, 'login.html')
    
    
    def logout(request):
        auth.logout(request)
        return redirect('login')
    
    
    @login_required(login_url='login')
    def dashboard(request):
        return render(request, 'dashboard.html')
    
    
    @login_required(login_url='login')
    def add_class(request, id=0):
        if request.method == 'GET':
            if id == 0:
                form = GrpDetailsForm()
            else:
                info = GrpDetails.objects.get(pk=id)
                form = GrpDetailsForm(instance=info)
            return render(request, 'newform.html', {'form': form})
    
        else:
            if id == 0:
                form = GrpDetailsForm(request.POST)
            else:
                info = GrpDetails.objects.get(pk=id)
                form = GrpDetailsForm(request.POST, instance=info)
            if form.is_valid():
                form.save()
            return redirect('dashboard')

urls.py

    from django.urls import path
    from .views import *
    
    
    urlpatterns = [
        path('', login, name='login'),
        path('dashboard', dashboard, name='dashboard'),
        path('new-class', add_class, name='addnewclass'),
        path('logout', logout, name='logout'),
    ]

forms.py

    from django import forms
    from .models import GrpDetails
    
    
    class GrpDetailsForm(forms.ModelForm):
        class Meta:
            model = GrpDetails
            fields = [
                'year',
                'branch',
                'group',
                'session',
                'sem',
                'subject',
                'stu_list'
            ]
    
        def __init__(self, *args, **kwargs):
            super(GrpDetailsForm, self).__init__(*args, **kwargs)
            self.fields['year'].label = 'Year'
            self.fields['stu_list'].required = False
    

newform.html

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