所以我有 django regustration,amd 我想延长表单的验证时间,以禁止在电子邮件已在使用的情况下进行注册 - 有什么方法可以做到这一点?
我有这个(嗯,我真的没有。我的笔记本电脑已被我的女朋友征用在 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 中,当我扩展一个类时,该类的所有非私有(private)成员都可以访问,并且其行为与父类中定义的完全相同。 在 django 中,我得到了很多
'customRegistrationForm' object has no attribute 'get_form_class'
或者我没有明确创建的方法的名称...我在覆盖中遗漏了一些东西吗?
已更新更新
我复制了第二个示例
http://pbjots.blogspot.com/2012/01/customising-django-registration-no.html
这很有效。仍然不确定为什么扩展不保留所有这些方法,或者如果我只是通过盲目复制代码破坏某些东西 - 有什么想法吗?
最佳答案
要扩展注册表以包含电子邮件,您必须首先扩展 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/
关于django - 扩展 django-registration RegisterForm 类的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10507238/