Quantcast
Viewing latest article 3
Browse Latest Browse All 3

Dos formularios en una sola vista Django - CreateView

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!


Viewing latest article 3
Browse Latest Browse All 3

Trending Articles