我是django的新手,在一个需要多种注册类型的网站上工作,需要两种单独的形式,并且基于使用allauth的cookiecutter-django模板。
我仍然希望保留allauth的电子邮件确认和密码验证。
我已经四处寻找解决方案了,接下来是这样的: Multiple signup, registration forms using django-allauth
它没有解决我的问题。在我的情况下,注册表单保持不变。也许只是因为我试图在表格中使用模型?
这是我尝试自定义登录表单:
在cookiecutter的app users /
中在models.py中:
class Proveedor(models.Model):
TIENE_EMPRESA = (
('S','Si'),
('M','No'),
)
SEXO = (
('F','Femenina'),
('M','Masculino'),
)
user = models.OneToOneField(User, on_delete=models.CASCADE)
oficios = []
ubicacion = models.CharField(_('Ubicacion'),max_length=255)
ubicaciones_servicios = []
tiene_empresa = models.CharField(_('Tienes Empresa?'),max_length=1, choices=TIENE_EMPRESA)
foto = models.ImageField(_('Foto'),upload_to=None, blank=False)
email = models.EmailField(_('Email'),max_length=254)
fecha_nacimiento = models.DateField(_('Fecha de nacimiento'), default=datetime.datetime.now(), blank=True)
sexo = models.CharField(_('Sexo'),max_length=1, choices=SEXO)
telefono = models.CharField(_('Numero de Telefono'),max_length=10)
fotos_trabajos_realizados = []
descripcion_forma_trabajar = models.TextField(_('Descripcion de Forma de Trabajar'),null=True, blank=True)
class Meta:
db_table = 'proveedor'
permissions = (
("menu_proveedor", "Puede ver menu de proveedor"),
)
在formularios.py(表格)中:
class FormularioProveedor(SignupForm):
class Meta:
model = Proveedor
fields = '__all__'
def save(self, request, user):
user = super(FormularioProveedor, self).save(request)
user.sexo = self.cleaned_data['sexo']
user.tiene_empresa = self.cleaned_data['tiene_empresa']
user.save()
在views.py中:
class ProveedorRegistroView(SignupView):
template_name = 'account/form_proveedor.html'
form_class = FormularioProveedor
redirect_field_name = 'proximo'
view_name = 'registroproveedor'
success_url = None
def get_context_data(self, **kwargs):
ret = super(ProveedorRegistroView, self).get_context_data(**kwargs)
ret.update(self.kwargs)
return ret
registroproveedor = ProveedorRegistroView.as_view()
用于测试的包目录中的urls.py:
url(r'registroproveedor', registroproveedor, name='registroproveedor')
最后模板本身:
{% extends "account/base.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% trans "Registro de Proveedor" %}{% endblock title %}
{% block content %}
<form id="signup_form" method="post" action="{% url 'registroproveedor' %}">
{% csrf_token %}
{{ form|crispy }}
</form>
{% endblock %}
我只是通过在设置中指向我的表单来显示新字段,分配ACCOUNT_SIGNUP_FORM_CLASS ......但这并不是我真正需要或想要的。我只想要多个注册表单,仍然能够利用allauth提供的功能和cookiecutter-django提供的模板。现在,基于这个模板,我发现很多东西可能是错误的,任何帮助都会受到赞赏。感谢。
答案 0 :(得分:1)
当我进一步了解 Django 的默认用户注册表时,我发现了以下网站:
https://learndjango.com/tutorials/django-custom-user-model
本教程的一个关键方面是使用默认的 Django 类模型来创建新的类模型,如果想要添加新的元字段,这些模型会更加灵活。在 cookiecutter-django 模板中,他们在 .../users/forms.py 文件中执行以下操作:
from django.contrib.auth import forms as admin_forms
class UserCreationForm(admin_forms.UserCreationForm):
...
如上所示,导入了默认的 Django 类模型,并使用它创建了一个继承默认类的所有方法和属性的类模型。如果我正确理解您的问题,您想使用 cookiecutter-django 默认模板并多次重复使用它们来创建不同类型的注册表。
我可能错了,但以下可能有效:
from (DIRECTORY, example: ...user/forms.py) import (COOKIECUTTER-DJANGO REGISTRATION CLASS, example UserCreationForm
class NewUserRegistrationForm(UserCreationForm):
Class Meta(UserCreationForm.Meta):
model = User # cookiecutter-django template already includes this
fields = ('username', 'email', 'street', 'house_number', 'postal_code', 'province', 'state', 'country',)
# add additional fields in here
请注意,cookiecutter-django UserCreationForm 已经是默认 Django UserCreationForm 的副本,因此我在示例中显示的代码是 cookiecutter-django UserCreationForm 的副本。因此,该示例与默认的 Django UserCreationForm 没有什么不同,除了包含的 Meta 字段变量和 allauth 的使用。
我自己还是个新手,所以我可能是错的,但这可能会解决您的问题。