Расширенная форма регистрации, но не сохраняется в БД - PullRequest
0 голосов
/ 07 мая 2019

Я расширил форму регистрации в Django, основанную на UserCreationForm. Он будет публиковать данные, но не будет отправлять их в БД. Что я неправильно понял?

Мой логин, который можно найти в моих файлах views.py, работает просто отлично.

Я добавил проверку формы, чтобы проверить форму, я также проверил, что я могу видеть, что опубликовано. Под вкладкой сети в Chrome Inspector я вижу это под заголовком моей формы:

Form data:
csrfmiddlewaretoken: 3GHtaasjvJ5Qbl3qvDB9loxCdgYdtZ0aRwG0g5n3sjlopGUZlNt1wEOaLNVLdIe7
first_name: dfhdsfh
last_name: dfghfgh
username: dfhg
email: hdghgfh@sdg.dk
password: lolleren123
password2: lolleren123

Мои файлы приведены ниже. Я очистил код, поэтому здесь показан только необходимый код.

urls.py

from django.urls import path, re_path, reverse_lazy
from . import views
from django.contrib.auth import views as auth_views

app_name = 'accounts'

urlpatterns = [
    path('login', views.login_view, name='login'),
    path('signup', views.signup_view, name='signup'),
    path('logout', views.logout_view, name='logout'),
]

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class RegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = (
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2'
        )

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.first_name = cleaned_data['first_name']
        user.last_name = cleaned_data['last_name']
        user.email = cleaned_data['email']

        if commit:
            user.save()

        return user

views.py

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth import login, logout
from accounts.forms import RegistrationForm
from django.contrib import messages


def signup_view(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = form.save()
            messages.success(request, "Your user is created - Thank you for joining us")
            login(request, user)
            return redirect('lol')
    else:
        form = RegistrationForm()
    return render(request, 'index.html', {'form': form})

def login_view(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            messages.success(request, "You've been logged in!")
            return redirect('profiles:profile', request.user.username)
    else:
        form = AuthenticationForm()
    return render(request, '/', {'form': form})

index.html

<form action="{% url 'accounts:signup' %}" name="sign_up" method="post" autocomplete="off">
    {% csrf_token %}
    <div class="top-row">
        <div class="field-wrap">
            <label>
                First Name
            </label>
            <input type="text" autocomplete="off" name="first_name" required />
        </div>

        <div class="field-wrap">
            <label>
                Last Name
            </label>
            <input type="text" autocomplete="off" name="last_name" required />
        </div>
    </div>
    <div class="top-row">
        <div class="field-wrap">
            <label>
                Username
            </label>
            <input type="text" autocomplete="off" name="username" required />
        </div>

        <div class="field-wrap">
            <label>
                E-mail
            </label>
            <input type="email" autocomplete="off" name="email" required />
        </div>
    </div>
    <div class="top-row">
        <div class="field-wrap">
            <label>
                Password
            </label>
            <input type="password" autocomplete="off" name="password" required />
        </div>

        <div class="field-wrap">
            <label>
                Repeat
            </label>
            <input type="password" autocomplete="off" name="password2" required />
        </div>
    </div>
    <button type="submit" class="button button-block">Register</button>
</form>

Я надеюсь быть направленным на верный путь к этой ошибке, поскольку я новичок, и мне трудно понять, где она идет не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...