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)