Django Пользовательская форма не сохраняет данные в базу данных - PullRequest
0 голосов
/ 16 января 2020

Я новичок в Django. Я знаю, что этот вопрос задавался здесь несколько раз, но ни одно из представленных решений не помогло мне. Я создаю пользовательскую форму регистрации пользователя. Форма отображается правильно, но не отправляет данные в базу данных после отправки. Он просто обновляет и стирает введенные данные. Последние несколько часов я ломал голову, но не могу указать, где проблема в этом коде. Ваша помощь будет оценена искренне. Спасибо

Мой взгляд выглядит следующим образом

```from django.shortcuts import render, redirect
from users.forms import RegistrationForm
from django.contrib import messages


def register(request):
    """Registration view"""
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data('username')
            messages.success(request, f'Account created for{username}!')
            form.save()
            return redirect('bookings-home')
        else:
            print (form.errors)

    else:
        form = RegistrationForm()

    return render(request, 'users/register.html', {'form': form})
```
**My Form is as follows**

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

class RegistrationForm(UserCreationForm):
    """Handles users registration"""
    email = forms.EmailField(required=True)

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

    def save(self, commit=True):
        """Save data to the database if safe"""
        user = super(RegistrationForm, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

        return user
```
**My template code is as follows**
```<form method="POST" action = '.'>
    {% csrf_token %}

    <div class="form-inner">

      <div class="login-with-socials">
        <button class="btn btn-facebook btn-block">Register with Facebook</button>
        <!-- <button class="btn btn-google btn-block">Register with Google</button> -->
        <button class="btn btn-twitter btn-block">Register with Twitter</button>
        <!-- <button class="btn btn-pinterest btn-block">Register with Pinterest</button> -->
      </div>

      <div class="text-seperator">
        <span>or</span>
      </div>
      {% for field in form %}
      <div class="form-group">
        <input id="login_username" class="form-control" placeholder="{{field.label}}" type="{{ field.field.widget.input_type }}">

      </div> {% endfor %}```

**And finally my url is as follows**

```from django.contrib import admin
from django.urls import path, include
from users import views as user_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', user_views.register, name='register'),
    path('', include('hotels.urls')),
]```

1 Ответ

0 голосов
/ 17 января 2020

Мне частично удалось найти решение вышеуказанной проблемы с помощью crisp_forms. В первом случае я пытался использовать css с Django полями. Мне все еще очень любопытно узнать, почему вышеуказанный метод не работает

...