覆盖Django-allauth默认表单

5
我想覆盖django-allauth的默认表单以更改或添加默认部件属性和类变量,而不更改allauth表单的初始代码。如何做到这一点?
我的工作区域: 1)通过pip安装了django-allauth作为包; 2)根据github项目的建议配置了设置; 3)本地创建了登录、注册模板; 4)创建forms.py,其中定义了一个继承于django-allauth表单的子类。
from allauth.account import SigninForm
class mySigninForm (SigninForm): username = ...//覆盖变量
这是正确的方法吗?
谢谢!

是的,覆盖allauth表单类是最简单和最通用的方法。 - Amyth
2个回答

4

如果您想使用allauth表单提供的方法或功能,则覆盖类似于当前正在使用的表单类是最好的选择。

from allauth.account.forms import LoginForm
from django import forms
from myapp.forms import widgets


class MyLoginForm(LoginForm):

    // Override attributes
    existing_field = forms.CharField(widget=widgets.CustomWidget())

    // Add Custom Attributes
    new_field = forms.CharField(widget=widgets.CustomWidget())

如果您想要完全自定义的表单,可以使用自定义的Django表单并在视图中使用它。例如:

表单

from django import forms
from myapp.forms import widgets

class MyLoginForm(forms.Form):
    // Add atributes and methods
    some_field = forms.CharField(widget=widgets.CustomWidget())

视图

from django.views.generic.edit import FormView
from myapp.forms import MyLoginForm

LoginUser(FormView):
    form = MyLoginForm

谢谢回复!但是,我如何在不覆盖子表单类中的变量的情况下向父部件添加属性? - ilidream
我已更新答案,说明如何使用自定义小部件以及重写和新字段。 - Amyth
你如何以这种方式覆盖 allauth 登录表单? - wnajar
@Amyth,我尝试过这个方法,但我被卡住了,可能是因为某个愚蠢的地方,但是我该如何引用视图?由于我需要替换allauth URL,所以我可能会在allauth URL之前放入一个URL;类似这样:url(r'^accounts / login / $',view = views.MyLoginForm.as_view(),name ='myloginform'), 只是这种方法不起作用...请给予建议。 - musicformellons
@musicformellons 是的。如果你重写了视图,你要么需要重写现有的URL,要么创建一个新的URL来访问该视图。 - Amyth

0
您可以通过创建自己的模板文件树来覆盖任何(或全部)allauth默认模板。
层次结构的命名必须与 allauth 相匹配,例如这是来自我的项目:
allauthdemo/templates/
├── allauth
│   ├── account
│   └── socialaccount
├── my
├── other
├── template
└── dirs

settings.py 中的模板设置必须包括这些目录,例如:

TEMPLATES = [
    {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [
        os.path.join(BASE_DIR, 'allauthdemo', 'templates', 'allauth'),
        os.path.join(BASE_DIR, 'allauthdemo', 'templates'),
    ],
    ...

这个在Github上的allauth演示展示了如何实现它。免责声明:我编写了该演示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接