如何在 Django 默认用户表中保存电子邮件和姓名字段

Posted

技术标签:

【中文标题】如何在 Django 默认用户表中保存电子邮件和姓名字段【英文标题】:How to save the email and name fields in the Django deafult User table 【发布时间】:2011-04-03 07:25:13 【问题描述】:

我想将电子邮件和姓名字段保存在名为 UserSignup 的 django 默认表中 我的models.py是:

from django.db import models
class UserSignup(models.Model):
    mailid      = models.CharField(max_length=100)
    name        = models.CharField(max_length=100)

我的views.py是:

from django import views
from django.shortcuts import render_to_response
from django.template import RequestContext
from Deals.signup.forms import signup
from django.contrib.auth.models import User
from django.http import HttpResponse

def usersignup(request,form_class=signup):

   form = form_class()
   print form
   if form.is_valid():  
       mail= UserSignup(mailid=request.POST['mailid'])
       mail.save()
       name= UserSignup(name=request.POST['name'])
       name.save()
  else:
       form = form_class()    
  return render_to_response('signup/registration_form.html','form':form)

forms.py 是

from django import forms
from django.contrib.auth.models import User
from Deals.signup.models import *
from django.utils.translation import ugettext_lazy as _

class signup(forms.Form):

    email = forms.EmailField(widget=forms.TextInput(),
                         label=_("Email address:"))

    username = forms.RegexField(regex=r'^\w+$',
                            max_length=30,
                            widget=forms.TextInput(),
                            label=_("Name:"))

def save(self,request,update):

    name =  self.cleaned_data['name']
    name.save()
    email =  self.cleaned_data['email']
    email.save()

请帮助我将表单输入保存在数据库中

【问题讨论】:

【参考方案1】:

正确检查 Django 文档http://docs.djangoproject.com/en/dev/topics/forms/

只需在 views.py 中更改您的代码。

def usersignup(request,form_class=signup):

    if request.method == 'POST': #If its a form submission, the method is POST
        form = form_class(request.POST)
        if form.is_valid():  
             newuser = form.save()
    else: #Else display the form 
        form = form_class()    

    return render_to_response('signup/registration_form.html','form':form)

表单文件中的“保存”功能不正确,不需要。

附带说明,您的“UserSignup”不是默认用户表。那将是 Django 提供的用户模型。这已经具有您在 UserSignup 中创建的字段。为什么不使用 Django 的那个特性呢?

【讨论】:

if request.method = 'POST': 应该使用比较 == 来代替。 @kriegar - 是的,现在已修复。我从头顶写了代码。【参考方案2】:

将模型元素一次性保存在表单中可能会更好。

def save(self):
    new_user = User.objects.create_user(name = self.cleaned_data['name'],
                                        email = self.cleaned_data['email'])
return new_user

【讨论】:

以上是关于如何在 Django 默认用户表中保存电子邮件和姓名字段的主要内容,如果未能解决你的问题,请参考以下文章

如何检索用户名和姓并将其映射到 ViewModel

如何覆盖 django-redux 默认用户注册表单

如何修改默认的Django用户表[重复]

如何在 Django 的 FileField 中保存来自传入电子邮件的附件?

注销后如何保存购物车数据的会话,以便用户在 Django 中再次登录时可以找到它们?

如何使用 django 在模板中显示默认值?