Почему мои формы не действительны (как forms.Form, так и ModelForm), и почему он не сохраняет данные в базу данных?
views.py
мое представление содержит две формы, userform, которую я создал с помощью forms.Form и snippetform, которую я создал с помощью ModelForm. создал с помощью ModelForm.
from django.shortcuts import render
from .forms import Snippetform, Userform
from .models import User, Snippet
from django import forms
# Create your views here.
def user(request):
form = Userform()
if request.method == "POST":
form = Userform(request.POST)
if form.is_valid():
username = form.cleaned_data["username"]
fname = form.cleaned_data["fname"]
lname = form.cleaned_data["lname"]
email = form.cleaned_data["email"]
password = form.cleaned_data["password"]
password2 = form.cleaned_data["password2"]
new_user = User.objects.create(username,fname,lname,email,password,password2)
new_user.save()
return render(request,'my_app/user.html',{'form':form})
def snippet(request):
form = Snippetform()
if request.method == "POST":
form = Snippetform(request.POST)
if form.is_valid():
form.save()
else:
print(form.errors.as_data())
return render(request,'my_app/snippet.html',{'form':form})
def thanks(request):
return render(request,'my_app/thanks.html',)
forms.py
from django import forms
from . models import Snippet
class Userform(forms.Form):
username = forms.CharField()
fname = forms.CharField(label="First name")
lname = forms.CharField(label="Last name")
email = forms.EmailField(label="E-mail")
password = forms.IntegerField(required=False)
password2 = forms.IntegerField(label="Confirm password",required=False)
class Snippetform(forms.ModelForm):
class Meta:
model = Snippet
fields = ("name","body")
models.py
from django.db import models
# Create your models here.
class User(models.Model):
username = models.CharField(max_length=100)
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
email = models.EmailField(max_length=30)
password = models.IntegerField()
password2 = models.IntegerField()
class Snippet(models.Model):
name = models.CharField(max_length=50)
body = models.TextField(max_length=150)
urls.py
from django.urls import path
from . import views
#registered namespace for my app name which is "my_app"
app_name = 'my_app'
urlpatterns = [
path('user/',views.user,name='user'),
path('snippet/',views.snippet,name='snippet'),
path('thanks/',views.thanks,name='thanks'),
]
snippet.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Welcome to Snippet view!!</h1>
<form action="{% url 'my_app:thanks' %}" method="POST">
{% csrf_token %}
{{form}}
<button type="submit">Submit</button>
</form>
</body>
</html>
user.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Welcome to the User view!</h1>
<form action="{% url 'my_app:thanks' %}" method="POST">
{% csrf_token %}
{{form}}
<button type="submit">Submit</button>
</form>
</body>
</html>
thank.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Welcome to the Thank you view!</h1>
<h1>Thank you for filling this form</h1>
</body>
</html>
admin.py
# Я даже зарегистрировал свои модели в admin.py, чтобы просмотреть объекты данных оттуда, но он не сохраняет никаких данных, и я также проверил в shell тоже, но он не сохраняет никаких данных.
from django.contrib import admin
from.models import User,Snippet
# Register your models here.
admin.site.register(User)
admin.site.register(Snippet)