【问题标题】:Django Custom Form not saving data to DatabaseDjango 自定义表单未将数据保存到数据库
【发布时间】:2020-01-16 10:24:09
【问题描述】:

我是 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')),
]```

【问题讨论】:

    标签: django-forms django-templates django-views


    【解决方案1】:

    通过实施crisp_forms,我部分能够解决上述问题。在第一个实例中,我试图将 css 与 Django 字段一起使用。我还是很想知道为什么上面的方法不起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2018-05-16
      • 2017-03-06
      • 2016-10-15
      相关资源
      最近更新 更多