所以我有django regustration,我想扩展表单的版本以禁止已经使用电子邮件的注册 - 这是怎么做的?
我有这个(好吧,我真的没有。我的笔记本电脑已经被我的gf观看了hulu上的声音,所以这来自内存和我的ipad):
import django-registration.registrationForm
class customRegistrationForm(form.RegistrationForm):
def clean_email(self):
#check here like the one for username!
我可以这样做吗?另外,我应该在哪里贴这个自定义表格?我假设我没有把它与django-registration文件夹,所以在我的应用程序文件夹...我“意味着”把它放在一个特定的文件夹?如果我只是将它粘贴在基础app_name文件夹中并且调用是customRegistrationForm?
,这是否重要?干杯! 安德鲁
更新
好的,所以我已经解决了“覆盖”django中的问题,我需要将这些类放在 init .py中,如果我想要一个子文件夹被选中,它需要自己的 init .py文件“文件夹” init .py文件可以为空
不知道为什么会这样,大概是python的东西?另外,不确定我是否可以在文件夹中的单独文件中使用customRegisterForm.py,或者 需要 init .py
无论如何,接下来是覆盖似乎不起作用我的假设。
在Java中,当我扩展一个类时,可以访问任何和所有类非私有成员,并且行为与在父类中定义的完全相同。 在django,我得到了很多
'customRegistrationForm'对象没有属性'get_form_class'
或我没有明确创建的方法的名称...我是否在覆盖中遗漏了什么?
更新更新
我从
复制了第二个例子http://pbjots.blogspot.com/2012/01/customising-django-registration-no.html
这是一种享受。仍然不确定为什么扩展不会保留所有这些方法,或者如果我只是通过盲目地复制代码打破某些想法? -
答案 0 :(得分:1)
要扩展注册表单以包含电子邮件,您首先要扩展 UserCreationForm 以包含电子邮件字段。您可以创建一个名为forms.py的文件,以包含该特定应用所需的所有表单,但根据我的经验,您通常不必使用 init.py 。
以下是如何扩展注册表单以包含电子邮件的示例:
from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User
class RegisterForm(UserCreationForm):
email = forms.EmailField(label="E-Mail")
class Meta:
model = User
fields = ("username", "email", )
def clean_email(self):
email = self.cleaned_data["email"]
try:
User.objects.get(email=email)
except User.DoesNotExist:
return email
raise forms.ValidationError("A user with that email address already exists.")
查看这个Django教程,它很好地概述了这个过程。 https://docs.djangoproject.com/en/1.4/intro/tutorial01/
答案 1 :(得分:1)
查看 RegistrationFormUniqueEmail 表单。它是一个来自django-registration的内置类,可以完成工作
from registration.forms import RegistrationFormUniqueEmail