我试图用一两个额外的字段设置django-registration表单。我已经阅读了文档并搜索了StackOverflow。我遇到了用户在新字段中注册的问题,但是当我尝试登录时,它无法识别密码。
我已经创建了一个新视图(我刚从django-registration剪切并粘贴了注册表,因为我只是想让它最初运行):
class MyRegistrationView (RegistrationView):
form_class = UserRegForm
def register(self, form):
new_user = RegistrationProfile.objects.create_inactive_user(
form,
site=get_current_site(self.request)
)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=self.request)
return new_user
它使用以下形式:
class UserRegForm(RegistrationForm):
CHOICES = Institution.objects.all().order_by('name')
institution=forms.ChoiceField(choices=( (x.id, x.name) for x in CHOICES ),
required = True)
这些是其他型号:
class Institution(models.Model):
name = models.CharField(max_length=200)
def __unicode__(self):
return u'%s' % (self.name)
class UserProfile(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
institution=models.ForeignKey(
Institution,
null=True,
blank=True)
def __unicode__(self):
return u'%s' % (self.user)
我的网址
url(r'^register', views.MyRegistrationView.as_view(form_class=UserRegForm), name='registration_register'),
我已经添加了这个来保存数据:从模型导入UserProfile从表单导入UserRegForm
def user_created(sender, user, request, **kwargs):
form = UserRegForm(request.POST)
try: data = UserProfile.objects.get(user=user)
except: data = UserProfile(user=user)
data.institution = form.data["institution"]
data.save()
from registration.signals import user_registered
user_registered.connect(user_created)
一切正常,用户注册,发送电子邮件,机构保存到UserProfile,但当我尝试使用新用户登录(激活帐户)时,它告诉我用户名和密码don& #39; t匹配。
当我查看数据库时,散列的paasword字符串似乎比管理员短了10个字符(使用manage.py createsuperuser进行设置)所以我正在做一些我不应该做的事情。
非常感谢帮助。
答案 0 :(得分:0)
我基本上将所有RegistrationView复制到MyRegistrationView中解决了这个问题。登录现在工作得很好。我不确定为什么这是必要的。
private static void Main(string[] args) {
try {
Console.WriteLine(MyClass.randomkey.Next());
System.Threading.Thread.Sleep(5);
var x = new MyClass();
Console.WriteLine(x.returnkey());
System.Threading.Thread.Sleep(5);
var y = new MyClass();
Console.WriteLine(y.returnkey());
Console.ReadLine();
} catch (Exception e) {
Console.WriteLine(e.Message);
}
}
剩下的问题是它只是重新加载注册页面而不是完成注册?