vistas urls tutorial template examples clases basadas django django-models django-forms django-views django-users

urls - render django



Cómo crear una vista que guarda los objetos User y UserProfile en Django (1)

Casi allí :)

def register(request): if request.method == ''POST'': form1 = UserCreationForm(request.POST) form2 = UserProfileForm(request.POST) if form1.is_valid() and form2.is_valid(): user = form1.save() # save user to db userprofile = form2.save(commit=False) # create profile but don''t save to db userprofile.user = user userprofile.location = get_the_location_somehow() userprofile.save() # save profile to db else: form1 = UserCreationForm() form2 = UserProfileForm() c = { ''form1'':form1, ''form2'':form2, } c.update(csrf(request)) return render_to_response("registration/register.html", c)

Para aclarar un poco, form.save() crea una instancia del Modelo y la guarda en db. form.save(commit=False) Simplemente crea una instancia, pero no guarda nada en db.

Tengo dos modelos en Django: Usuario (predefinido por Django) y Perfil de Usuario. Los dos están conectados a través de una clave externa.

models.py:

class UserProfile(models.Model): user = models.ForeignKey(User, unique=True, related_name="connect") location = models.CharField(max_length=20, blank=True, null=True)

Estoy usando UserCreationForm (predefinido por Django) para el Modelo de usuario, y creé otro formulario para UserProfile en forms.py

#UserCreationForm for User Model class UserProfileForm(ModelForm): class Meta: model = UserProfile exclude = ("user", )

Cargué ambos formularios en una plantilla, registration.html, para que el cliente del sitio web pueda ingresar datos sobre los campos contenidos en ambos modelos (por ejemplo: "first_name", "last_name" en el modelo de usuario, "location" en el modelo UserProfile).

Por mi vida, no puedo entender cómo crear una vista para este formulario de registro. Lo que he intentado hasta ahora creará el objeto User, pero no asociará otra información, como la ubicación en el objeto UserProfile correspondiente. ¿Puede alguien ayudarme? Esto es lo que tengo actualmente:

def register(request): if request.method == ''POST'': form1 = UserCreationForm(request.POST) form2 = UserProfileForm(request.POST) if form1.is_valid(): #create initial entry for User object username = form1.cleaned_data["username"] password = form1.cleaned_data["password"] new_user = User.objects.create_user(username, password) # What to do here to save "location" field in a UserProfile # object that corresponds with the new_user User object that # we just created in the previous lines else: form1 = UserCreationForm() form2 = UserProfileForm() c = { ''form1'':UserCreationForm, ''form2'':form2, } c.update(csrf(request)) return render_to_response("registration/register.html", c)