Estoy tratando de crear un solo formulario para un user
que tenga campos de ambos formularios, tanto el user
como de userprofile
que cree para extender el modelo.
Archivo models.py
:
from django.db import modelsfrom django.forms import ModelFormfrom django.contrib.auth.models import Userclass UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) date_of_birthday = models.DateField() address = models.TextField() phone_number = models.CharField(max_length=11) def __str__(self): return self.user.first_nameclass UserProfileForm(ModelForm): class Meta: model = UserProfile fields = '__all__'class UserForm(ModelForm): class Meta: model = User fields = ['username', 'first_name', 'last_name', 'email', 'password']
Archivo views.py
:
from django.shortcuts import renderfrom django.views.generic import CreateViewfrom .models import UserProfile, UserProfileForm, UserFormclass UserProfileCreateView(CreateView): model = UserProfile template_name = 'userprofiles/user_create.html' success_url = '/' form_class = UserProfileForm def form_valid(self, form): form.save() return super(UserCreate, self).form_valid(form)class UserCreateView(CreateView): model = UserProfile template_name = 'userprofiles/user_create.html' success_url = '/' form_class = UserForm def form_valid(self, form): form.save() return super(UserCreate, self).form_valid(form)
Vista, aquí usando form
me muestra en ambos el mismo formulario que es el de modelo de User
que trae Django.
<form action="{% url 'users:user_create' %}" method="post"> {% csrf_token %} {{ form.as_p }} {{ form.as_p }}<button type="submit">Crear Usuario</button></form>
Sé que tal vez pueda hacerse con Formset
o con prefix
de la vista basada en clase, pero creo que el prefix
no es necesariamente para eso y no lo tengo del todo claro.
Saludos!