繁体   English   中英

如何在不使用用户表单的情况下使用管理员操作在Django注册中创建非活动用户帐户

[英]How to create inactive user account in django-registration by using admin action without user form

我是Python和Django的新手,正在尝试开发一个三步激活/注册系统。

第1步:注册电子邮件地址,名字和姓氏以进行验证。

步骤2:通过验证后,创建一个新的用户记录,其中包含要通过电子邮件发送的激活密钥,并将电子邮件地址作为记录用户名。

第3步:激活帐户。


我创建了一个应用程序,它负责第1步,并且已经能够将django-registration和django自定义用户模型结合起来以处理第2步和第3步。

通过内置的管理工具,这些都可以在步骤1和2之间进行手动链接。 但是,我想执行一个管理员操作,该操作可以从步骤1中选择所有经过验证的用户,并使用记录来自动处理步骤2,而不必为每个用户使用表格。

我相信我应该能够调用RegistrationManager create_inactive_user方法来执行此操作。 我的问题是,由于对Python / Django的了解有限,我正在努力调用此方法。

实际上,我认为我称它为OK,但是步骤1应用程序模型遇到错误。 此模型使用BaseManager中的normalize_email实用程序,并且在直接在该应用程序中使用时可以工作,但是当我使用create_inactive_user时,出现错误:/ admin / simple_reg / emailreg /的TypeError'NoneType'对象不可调用

我认为有些东西我不包括在内。 以下是我的admin.py文件中的相关详细信息:

from django.contrib import admin
from django.contrib.auth import get_user_model

from simple_reg.models import EmailReg       # Initial step 1 registration model
from userinfo.models import UserManager      # Step 2 and 3 custom user model
from registration.models import RegistrationManager


class EmailRegAdmin(admin.ModelAdmin):
...
    def create_user_record(self, request, queryset):
        # Generate new User records from validated email contacts
        count = 0
        validated = len(queryset)
        for contact in queryset:
            pword = 'randomletters'
            try:
                existing = get_user_model().objects.filter(email__exact=contact.email)
                if existing.exists():
                    print "A user with the email address of %s already exists." % (contact.email)
                else:
                    RegistrationManager().create_inactive_user(contact.first_name,
                                           contact.last_name, contact.email, pword, site)
                        count = count + 1
                except:
                    print "User %s was not created" % (contact.email)

        self.message_user(request, "Of %s validations, %s user accounts have been created." % (validated, count))

create_user_record.short_description = "Generate new User records on selected contacts"

我相信这很简单,因此希望有人能够指出正确的方向。

终于自己找到了答案。

我应该一直在打电话给RegistrationProfile,而不是RegistrationManager。

我知道这很简单!

可能最简单的方法是创建自己的用户模型并定义一个布尔类型的字段,例如is_active()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM