首页 > 解决方案 > Djangoform 字段不显示

问题描述

我有注册表

形式

class RegisterForm(UserCreationForm):
    name = forms.CharField(max_length=255, label='Username', widget=forms.TextInput(attrs={'class': 'form-group'}))
    email = forms.EmailField(max_length=255, label='Email', widget=forms.EmailInput(attrs={'class': 'form-group'}))
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': 'form-group'}))
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput(attrs={'class': 'form-group'}))

    class Meta:
        model = User
        fields = ('name', 'email', 'password1', 'password2')

意见

class RegisterFormView(FormView):
    form_class = UserCreationForm
    success_url = '/login/'
    template_name = 'blog/signup.html'

    def form_valid(self, form):
        form.save()

        return super(RegisterFormView, self).form_valid(form)

    def form_invalid(self, form):
        return super(RegisterFormView, self).form_invalid(form)

  

html

<form method="POST" class="register-form" id="register-form" action="">
   {% csrf_token %}
   {% for field in form %}
    
   {{ field.errors }}
   {{ field.label_tag }} {{ field }}
    
   {% endfor %}
<div class="form-group form-button">
   <input type="submit" name="signup" id="signup" class="form-submit"
         value="Register"/>
</div>
</form>

我试过 {{form.as_p}} 和字段。在这两种情况下,电子邮件字段都不会显示和标签。注册正在工作

标签: htmldjangoforms

解决方案


好的,所以我想我已经实现了您的要求。首先,实际上,无需覆盖fields位于forms.py文件RegisterForm中的in 。你可以简单地这样写(是Django 定义的 a我们实际用于创建 a ):Userclassclasssuperuser

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



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

    class Meta:
        model = User
        fields = ("username" 
                    , "email" 
                    , "password1" 
                    , "password2")

    def save(self, commit=True):
        user = super(NewUserForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        if commit:
            user.save()
        return user

在您所写的views.py中:

from django.shortcuts import render
from django.views.generic import FormView
from .forms import *
from django.urls import reverse_lazy

class RegisterFormView(FormView):
    form_class = NewUserForm
    success_url = reverse_lazy('boldRichard:login')
    template_name = "register.html"

    def form_valid(self, form):
        form.save()

        return super(RegisterFormView, self).form_valid(form)

    def form_invalid(self, form):
        return super(RegisterFormView, self).form_invalid(form)


class LoginFormView(FormView):
    pass

最后在register.html中:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Register</title>
</head>

<body>
    <form method="POST" class="register-form" id="register-form" action="">
        {% csrf_token %}
        

        {{form.as_p}}

        
        <div class="form-group form-button">
            <input type="submit" name="signup" id="signup" class="form-submit" value="Register" />
        </div>
    </form>
</body>

</html>

如果需要更多帮助,请随时发表评论。


推荐阅读