Моя форма django показывает, что данные опубликованы, но данные не сохраняются в базе данных
Итак, моя форма работала просто отлично, пока я не поиграл с моим фронтендом... изменив внешний вид системы. Но я не думаю, что это влияет на мои формы, но на удивление все мои формы больше не сохраняют данные в базу данных!!! Помогите, ребята. Вот мой views.py
from django.contrib.auth.models import User
from django.contrib import messages
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from .forms import *
# Create your views here.
def register(request):
form = RegistrationForm()
if request.method == "POST":
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'User successfully registered!')
return redirect('home')
else:
form = RegistrationForm()
return render(request, 'accounts/register.html', {'form': form} )
def login(request):
if request.method == 'POST':
username = username.POST['username']
password = request.POST['password']
try:
user = Account.objects.get(username=username)
except:
messages.error(request, 'username does not exist')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
messages.error(request, 'Invalid username Or Password')
return render(request, 'accounts/login.html', {} )
models.py
forms.py
Я буду очень признателен за вашу помощь... у меня от нее голова болит и я не могу понять, почему данные не сохраняются в моей базе данных!!!
Похоже, что форма не переходит в представление register
, пожалуйста, проверьте это, так как имя, которое вы указали для перенаправления - home
в href
теге input (возможно, имя register
или что-то еще, проверьте это), также не упоминайте ничего вроде action
или href
, так как Django по умолчанию принимает маршрут текущей страницы, так:
Файл шаблона:
<form method="POST">
{% csrf_token %}
<div class="form-row" >
<div class="col-md-6 mb-0">
{{ form.email|as_crispy_field }}
</div>
<div class="col-md-6 mb-0">
{{ form.username|as_crispy_field }}
</div>
<!--<div class="col-md-6 mb-0">
{{ form.profile_picture|as_crispy_field }}
</div>-->
<div class="col-md-12 mb-0">
{{ form.address|as_crispy_field }}
</div>
<div class="col-md-6 mb-0">
{{ form.phone_number|as_crispy_field }}
</div>
<div class="col-md-6 mb-0">
{{ form.car|as_crispy_field }}
</div>
<div class="col-md-12 mb-0">
{{ form.details|as_crispy_field }}
</div>
<input style="margin-left: 10px;" class="btn btn-primary" type="submit" value="Sign Up">
</div>
</form>
views.py:
def register(request):
if request.method == "POST":
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'User successfully registered!')
return redirect('home')
else:
form = RegistrationForm()
return render(request, 'accounts/register.html', {'form': form} )
RegisterForm не сохраняет данные, потому что form.is_valid() равно False.
для вашей RegisterForm
поскольку вы используете поле file(image) в вашей форме, вы должны добавить enctype к тегу формы в шаблоне, следующим образом :
<form method="POST" entype="multipart/form-data">
и внутри вашего представления регистра вы должны инстанцировать вашу форму следующим образом:
form = RegistrationForm(request.POST, request.FILES)