【问题标题】:Djangoform field is not displayedDjango 表单字段不显示
【发布时间】:2021-11-10 09:55:20
【问题描述】:

我有注册表

表格

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}} 和字段。在这两种情况下,电子邮件字段都不会显示和标签。注册正在工作

【问题讨论】:

    标签: html django forms


    【解决方案1】:

    好的,我想我已经达到了你的要求。首先,实际上,不需要覆盖 forms.py 文件中RegisterForm 中的fields。你可以简单地这样写(User 是由 Django 定义的 class class,我们实际上用于创建 superuser):

    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>
    

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

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 2017-07-29
      • 2020-10-24
      • 1970-01-01
      • 2016-07-14
      • 2020-09-05
      • 2014-05-31
      • 2019-05-02
      相关资源
      最近更新 更多