Python 如何将最大长度添加到allauth用户名

Python 如何将最大长度添加到allauth用户名,python,django,django-allauth,Python,Django,Django Allauth,我正在使用Django allauth作为Django站点的用户帐户框架。文档显示存在一个帐户,但由于某些原因,没有帐户\用户名\最大长度 有没有办法创建用户名的最大长度 这是我的自定义allauth注册表-也许我可以在这里做些什么 class AllauthSignupForm(forms.Form): captcha = ReCaptchaField( public_key=config("RECAPTCHA_PUBLIC_KEY"), privat

我正在使用Django allauth作为Django站点的用户帐户框架。文档显示存在一个帐户,但由于某些原因,没有
帐户\用户名\最大长度

有没有办法创建用户名的最大长度

这是我的自定义allauth注册表-也许我可以在这里做些什么

class AllauthSignupForm(forms.Form):

    captcha = ReCaptchaField(
        public_key=config("RECAPTCHA_PUBLIC_KEY"),
        private_key=config("RECAPTCHA_PRIVATE_KEY"),
    )

    class Meta:
        model = User

    def signup(self, request, user):
        """ Required, or else it throws deprecation warnings """
        pass
编辑:尝试将SignupView子类化

draft1/forms.py

class AllauthSignupForm(SignupForm):
    def __init__(self, *args, **kwargs):
        super(AllauthSignupForm, self).__init__(*args, **kwargs)
        self.fields['username']['validators'] += MaxLengthValidator(150,
                                                                    "Username should be less than 150 character long")

    captcha = ReCaptchaField(
        public_key=config("RECAPTCHA_PUBLIC_KEY"),
        private_key=config("RECAPTCHA_PRIVATE_KEY"),
    )

    class Meta:
        model = User

    def signup(self, request, user):
        """ Required, or else it throws deprecation warnings """
        pass
from allauth.account.views import SignupView

class MySignupView(SignupView):
    form_class = AllauthSignupForm
url(r"^signup/$", MySignupView.as_view(), name="account_signup"),
ACCOUNT_SIGNUP_FORM_CLASS = 'draft1.forms.AllauthSignupForm'
draft1/views.py

class AllauthSignupForm(SignupForm):
    def __init__(self, *args, **kwargs):
        super(AllauthSignupForm, self).__init__(*args, **kwargs)
        self.fields['username']['validators'] += MaxLengthValidator(150,
                                                                    "Username should be less than 150 character long")

    captcha = ReCaptchaField(
        public_key=config("RECAPTCHA_PUBLIC_KEY"),
        private_key=config("RECAPTCHA_PRIVATE_KEY"),
    )

    class Meta:
        model = User

    def signup(self, request, user):
        """ Required, or else it throws deprecation warnings """
        pass
from allauth.account.views import SignupView

class MySignupView(SignupView):
    form_class = AllauthSignupForm
url(r"^signup/$", MySignupView.as_view(), name="account_signup"),
ACCOUNT_SIGNUP_FORM_CLASS = 'draft1.forms.AllauthSignupForm'
allauth/account/url.py

class AllauthSignupForm(SignupForm):
    def __init__(self, *args, **kwargs):
        super(AllauthSignupForm, self).__init__(*args, **kwargs)
        self.fields['username']['validators'] += MaxLengthValidator(150,
                                                                    "Username should be less than 150 character long")

    captcha = ReCaptchaField(
        public_key=config("RECAPTCHA_PUBLIC_KEY"),
        private_key=config("RECAPTCHA_PRIVATE_KEY"),
    )

    class Meta:
        model = User

    def signup(self, request, user):
        """ Required, or else it throws deprecation warnings """
        pass
from allauth.account.views import SignupView

class MySignupView(SignupView):
    form_class = AllauthSignupForm
url(r"^signup/$", MySignupView.as_view(), name="account_signup"),
ACCOUNT_SIGNUP_FORM_CLASS = 'draft1.forms.AllauthSignupForm'
draft1/settings.py

class AllauthSignupForm(SignupForm):
    def __init__(self, *args, **kwargs):
        super(AllauthSignupForm, self).__init__(*args, **kwargs)
        self.fields['username']['validators'] += MaxLengthValidator(150,
                                                                    "Username should be less than 150 character long")

    captcha = ReCaptchaField(
        public_key=config("RECAPTCHA_PUBLIC_KEY"),
        private_key=config("RECAPTCHA_PRIVATE_KEY"),
    )

    class Meta:
        model = User

    def signup(self, request, user):
        """ Required, or else it throws deprecation warnings """
        pass
from allauth.account.views import SignupView

class MySignupView(SignupView):
    form_class = AllauthSignupForm
url(r"^signup/$", MySignupView.as_view(), name="account_signup"),
ACCOUNT_SIGNUP_FORM_CLASS = 'draft1.forms.AllauthSignupForm'
上述代码返回此错误:

Traceback (most recent call last):
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 125, in inner_run
    self.check(display_num_errors=True)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/management/base.py", line 359, in check
    include_deployment_checks=include_deployment_checks,
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/management/base.py", line 346, in _run_checks
    return checks.run_checks(**kwargs)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/checks/registry.py", line 81, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/checks/urls.py", line 16, in check_url_config
    return check_resolver(resolver)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/core/checks/urls.py", line 26, in check_resolver
    return check_method()
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/urls/resolvers.py", line 254, in check
    for pattern in self.url_patterns:
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/urls/resolvers.py", line 405, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/django/urls/resolvers.py", line 398, in urlconf_module
    return import_module(self.urlconf_name)
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 665, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/Users/zorgan/Desktop/vorsso/venvor/draft1/urls.py", line 6, in <module>
    from . import views
  File "/Users/zorgan/Desktop/vorsso/venvor/draft1/views.py", line 11, in <module>
    from .forms import UserSettingsForm
  File "/Users/zorgan/Desktop/vorsso/venvor/draft1/forms.py", line 8, in <module>
    from allauth.account.forms import SignupForm
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/allauth/account/forms.py", line 228, in <module>
    class BaseSignupForm(_base_signup_form_class()):
  File "/Users/zorgan/Desktop/postr1/lib/python3.5/site-packages/allauth/account/forms.py", line 216, in _base_signup_form_class
    fc_classname))
django.core.exceptions.ImproperlyConfigured: Module "draft1.forms" does not define a "AllauthSignupForm" class
回溯(最近一次呼叫最后一次):
包装器中的文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/utils/autoreload.py”,第228行
fn(*args,**kwargs)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/management/commands/runserver.py”,第125行,在内部运行
self.check(display\u num\u errors=True)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/management/base.py”,第359行,选中
包括部署检查=包括部署检查,
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/management/base.py”,第346行,在运行检查中
返回检查。运行检查(**kwargs)
运行检查中的文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/checks/registry.py”,第81行
新建错误=检查(应用程序配置=应用程序配置)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/checks/url.py”,第16行,在check\u url\u config中
返回检查\u分解器(分解器)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/core/checks/url.py”,第26行,在check_解析器中
返回检查方法()
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/url/resolvers.py”,第254行,选中
对于self.url_模式中的模式:
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/utils/functional.py”,第35行,在__
res=instance.\uuuu dict\uuuu[self.name]=self.func(实例)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/url/resolvers.py”,第405行,url_模式
patterns=getattr(self.urlconf_模块,“urlpatterns”,self.urlconf_模块)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/utils/functional.py”,第35行,在__
res=instance.\uuuu dict\uuuu[self.name]=self.func(实例)
urlconf_模块中的文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/django/url/resolvers.py”,第398行
返回导入_模块(self.urlconf_名称)
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/importlib/_init__.py”,第126行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第986行,在_gcd_import中
文件“”,第969行,在“查找”和“加载”中
文件“”,第958行,在“查找”和“加载”中解锁
文件“”,第673行,在“加载”中
exec_模块中第665行的文件“”
文件“”,第222行,在已删除帧的调用中
文件“/Users/zorgan/Desktop/vorso/venvor/draft1/url.py”,第6行,在
从…起导入视图
文件“/Users/zorgan/Desktop/vorso/venvor/draft1/views.py”,第11行,在
from.forms导入用户设置表单
文件“/Users/zorgan/Desktop/vorso/venvor/draft1/forms.py”,第8行,在
从allauth.account.forms导入注册表单
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/allauth/account/forms.py”,第228行,在
类BaseSignupForm(\u base\u signup\u form\u class()):
文件“/Users/zorgan/Desktop/postr1/lib/python3.5/site packages/allauth/account/forms.py”,第216行,基本注册表单类
fc_类名称)
django.core.exceptions.ImpropertlyConfigured:模块“draft1.forms”未定义“AllauthSignupForm”类

您应该使用如下所示的最大长度验证器。关于验证器的更多文档


不确定这是否是最好的方法,但它是有效的

扩展
注册表单
后,将
用户名
字段完全更改为具有
max_length
参数的新字段

from django import forms
from django.utils.translation import ugettext_lazy as _
from allauth.account.forms import SignupForm

class AllauthSignupForm(SignupForm):
    username = forms.CharField(label=_("Username"),
                               min_length=5,
                               max_length=20, # Change this 
                               widget=forms.TextInput(
                                   attrs={'placeholder':
                                              _('Username'),
                                          'autofocus': 'autofocus'}))

我想解释一下为什么没有
帐户\用户名\最大长度
。如果打开源代码,您将看到
max_length
验证器来自
username
model字段

其中,
get\u username\u max\u length
是实际从
User
模型中提取
max\u length
值的函数

第一种方法:这样您就可以直接在您的
用户
的model
用户名
字段上更改
max_length
值(如果您将其交换)

我不认为重写表单字段或
\uuuuu init\uuuuu
方法实际上会像其他答案所建议的那样起作用,因为
max\u length
的赋值发生在
ACCOUNT\u SIGNUP\u form\u CLASS
的子类中

其中,
\u base\u signup\u form\u class
是获取您的
帐户\u signup\u form\u class

第二种方法:是将
SignupView
子类化,并覆盖它的
SignupForm
读和写

在这个
注册表单中
你可以按照@MehdiB或@PeterSobhi的建议去做

配置不当
问题是由于

因此,请确保这些表单在不同的python模块中按照


尝试使用全名导入,如表单中的: 从allauth.accounts将表单导入为AllauthForms 类AllauthSignupForm(AllauthForms.SignupForm):


我没有对此进行测试,很抱歉我用手机发布了此消息。我将很快重新格式化答案

这可以通过扩展
DefaultAccountAdapter
类并覆盖
clean_username
方法快速完成。您还需要在自定义验证后再次引用
clean_用户名
,以完成其他内置验证

这是可以做到的