使用子类RegistrationView

时间:2017-07-07 20:23:07

标签: python django django-registration

我试图用一两个额外的字段设置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进行设置)所以我正在做一些我不应该做的事情。

非常感谢帮助。

1 个答案:

答案 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);
            }
        }

剩下的问题是它只是重新加载注册页面而不是完成注册?