如何将自定义字段添加到 django 中的注册表单

时间:2021-06-21 10:14:54

标签: python django

from django import forms
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UsernameField
from django.contrib.auth.models import User
from django.forms.widgets import Widget
from django.utils.translation import gettext, gettext_lazy as _
from .models import Post

class SignUpForm(UserCreationForm):
 password1 = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class':'form-control'}))
 password2 = forms.CharField(label='Confirm Password (again)', widget=forms.PasswordInput(attrs={'class':'form-control'}))
 class Meta:
  model = User
  fields = ['username', 'first_name', 'last_name', 'email']
  labels = {'first_name': 'First Name', 'last_name': 'Last Name', 'email': 'Email'}
  widgets = {'username':forms.TextInput(attrs={'class':'form-control'}),
  'first_name':forms.TextInput(attrs={'class':'form-control'}),
  'last_name':forms.TextInput(attrs={'class':'form-control'}),
  'email':forms.EmailInput(attrs={'class':'form-control'}),
  }

class LoginForm(AuthenticationForm):
 username = UsernameField(widget=forms.TextInput(attrs={'autofocus': True, 'class':'form-control'}))
 password = forms.CharField(label=_("Password"), strip=False, widget=forms.PasswordInput(attrs={'autocomplete': 'current-password', 'class':'form-control'}))

class PostForm(forms.ModelForm):
  class Meta:
    model = Post
    fields = ['title', 'desc']
    labels = {'title':'Title', 'desc':'Description'}
    widgets = {'title':forms.TextInput(attrs={'class':'form-control'}),
    'desc':forms.Textarea(attrs={'class':'form-control'}), }

这是我的 forms.py 文件

from django.db import models

# Create your models here.
class Post(models.Model):
 title = models.CharField(max_length=150)
 desc = models.TextField()

这是我的models.py文件

现在我想为 SignUpForm 创建一个表,并向其中添加一些额外的字段,例如性别和标准,并将其保存到数据库中,我尝试使用性别和标准但它没有将值保存到数据库中,我该怎么办?

from django.shortcuts import render, HttpResponseRedirect
from .forms import SignUpForm, LoginForm, PostForm
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout
from .models import Post
from django.contrib.auth.models import Group
def user_signup(request):
 if request.method == "POST":
  form = SignUpForm(request.POST)
  if form.is_valid():
   messages.success(request, 'Congratulations!! You have become an Author.')
   user = form.save()
   group = Group.objects.get(name='Author')
   user.groups.add(group)
 else:
  form = SignUpForm()
 return render(request, 'blog/signup.html', {'form':form})

# Login
def user_login(request):
 if not request.user.is_authenticated:
  if request.method == "POST":
   form = LoginForm(request=request, data=request.POST)
   if form.is_valid():
    uname = form.cleaned_data['username']
    upass = form.cleaned_data['password']
    user = authenticate(username=uname, password=upass)
    if user is not None:
     login(request, user)
     messages.success(request, 'Logged in Successfully !!')
     return HttpResponseRedirect('/dashboard/')
  else:
   form = LoginForm()
  return render(request, 'blog/login.html', {'form':form})
 else:
  return HttpResponseRedirect('/dashboard/')

# Add New Post
def add_post(request):
 if request.user.is_authenticated:
  if request.method == 'POST':
   form = PostForm(request.POST)
   if form.is_valid():
    title = form.cleaned_data['title']
    desc = form.cleaned_data['desc']
    pst = Post(title=title, desc=desc)
    pst.save()
    form = PostForm()
  else:
   form = PostForm()
  return render(request, 'blog/addpost.html', {'form':form})
 else:
  return HttpResponseRedirect('/login/') 

这是我的 views.py 文件 我想为我的 SignUpForm 添加地址字段

谢谢,

0 个答案:

没有答案