Форма 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