Registration Form
Closed this issue · 0 comments
Esta es la respuesta de ChatGPT:
Para que tu formulario de registro registration_form.html
también permita la creación del modelo Profile
, necesitas hacer algunas modificaciones tanto en el formulario como en la vista que maneja el registro del usuario. Aquí te explico cómo hacerlo:
1. Crear un Formulario Personalizado
Debes crear un formulario que combine los campos del modelo User
y Profile
. Esto se hace extendiendo UserCreationForm
y añadiendo los campos del modelo Profile
.
Formulario personalizado en forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import Profile
class CustomUserCreationForm(UserCreationForm):
state = forms.ChoiceField(choices=ENTIDADES, required=True)
site = forms.ChoiceField(choices=SITIO, required=True)
position = forms.ChoiceField(choices=PUESTOS, required=True)
order = forms.IntegerField(required=False, initial=99)
class Meta:
model = User
fields = ('username', 'password1', 'password2', 'state', 'site', 'position', 'order')
def save(self, commit=True):
user = super().save(commit=False)
if commit:
user.save()
Profile.objects.create(
user=user,
state=self.cleaned_data['state'],
site=self.cleaned_data['site'],
position=self.cleaned_data['position'],
order=self.cleaned_data.get('order', 99)
)
return user
2. Modificar la Vista de Registro
Ahora necesitas modificar la vista que maneja el registro del usuario para que utilice este formulario personalizado.
Vista personalizada en views.py
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from .forms import CustomUserCreationForm
def register(request):
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=password)
login(request, user)
return redirect('index') # Redirige al inicio u otra página después del registro
else:
form = CustomUserCreationForm()
return render(request, 'registration/registration_form.html', {'form': form})
3. Actualizar el Template registration_form.html
Tu template ya está preparado para manejar el formulario personalizado, así que no es necesario hacer muchas modificaciones. Solo asegúrate de que el formulario personalizado sea pasado correctamente al contexto en la vista.
Template registration_form.html
{% extends "base.html" %}
{% load static %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block content %}
<form method="post" action=".">
{% csrf_token %}
{{ form | crispy }}
<input type="submit" value="{% trans 'Submit' %}" />
</form>
{% endblock %}
Resumen
- Formulario Personalizado: Creamos un formulario (
CustomUserCreationForm
) que combina los campos deUser
yProfile
. - Vista Personalizada: La vista de registro utiliza este formulario personalizado para crear tanto el usuario como su perfil.
- Template: El template ya está configurado para manejar el formulario personalizado sin necesidad de cambios adicionales.
Ahora, cuando un usuario se registre usando este formulario, se creará tanto el User
como su correspondiente Profile
con los datos proporcionados.