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.
Esta es la respuesta de ChatGPT:
Para que tu formulario de registro
registration_form.html
también permita la creación del modeloProfile
, 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
yProfile
. Esto se hace extendiendoUserCreationForm
y añadiendo los campos del modeloProfile
.Formulario personalizado en
forms.py
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
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
Resumen
CustomUserCreationForm
) que combina los campos deUser
yProfile
.Ahora, cuando un usuario se registre usando este formulario, se creará tanto el
User
como su correspondienteProfile
con los datos proporcionados.