bartnyk
bartnyk

Reputation: 13

My form doesn't add data to database - Django

I've just started my journey with django. Form is displayed on page, data typing works well, but data doesnt go to database. Form is about registation system on page.

models.py:

from django.db import models
from datetime import date

class Users(models.Model):
    login           = models.CharField(max_length=30)
    password        = models.CharField(max_length=30)
    mail            = models.CharField(max_length=40)
    create_date     = models.DateTimeField(default = date.today(), blank=True)

forms.py:

from django import forms
from .models import Users

class Register(forms.ModelForm):
    password = forms.CharField(max_length=32, min_length = 8, widget=forms.PasswordInput)
    login = forms.CharField(min_length=4, max_length=30)
    mail = forms.EmailField()
    class Meta:
        model = Users
        fields = ['login','password','mail']

register.html:

{% extends 'base.html' %}

{% block content %}
<div id="form-user">
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="SAVE" />
    </form>
</div>
{% endblock %}

views.py:

from django.shortcuts import render
from .forms import Register
from .models import Users


def register(request):
    if request.method == "POST":
        form = Register(request.POST)
        if form.is_valid():
            form.save(commit = True)
            form = Register()
    form = Register()
    return render(request, "register.html", {'form': form})

Upvotes: 1

Views: 879

Answers (1)

Kennoh
Kennoh

Reputation: 137

The problem lies in your views.py.You can try:

from django.shortcuts import render,redirect
from .forms import Register
from .models import Users


def register(request):
    if request.method == "POST":
        form = Register(request.POST)
        if form.is_valid():
            form.save(commit=False)
            form.save()
            return redirect('/') #redirect after saving
    form = Register()
    return render(request, "register.html", {'form': form})

Upvotes: 1

Related Questions