Vi otra respuesta here y otros lugares en la web que recomiendan usar user.get_profile al extender el usuario django incorporado. No hice eso en el siguiente ejemplo. La funcionalidad parece funcionar bien, pero ¿hay algún inconveniente para no usar user.get_profile()?¿Cuándo debería usar user.get_profile en django?
modelo
class UserProfile(models.Model):
user = models.ForeignKey(User, primary_key=True)
quote = models.CharField('Favorite quote', max_length = 200, null=True, blank=True)
website = models.URLField('Personal website/blog', null=True, blank=True)
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
fields = ('quote', 'website')
vista
@login_required
def user_profile(request):
user = User.objects.get(pk=request.user.id)
if request.method == 'POST':
upform = UserProfileForm(request.POST)
if upform.is_valid():
up = upform.save(commit=False)
up.user = request.user
up.save()
return HttpResponseRedirect('/accounts/profile')
else:
upform = UserProfileForm()
return render_to_response('reserve/templates/edit_profile.html', locals(), context_instance=RequestContext(request))
Puede soltar la línea 'user = User.objects.get (pk = request.user.id)' de su Vista. 'request.user' ya es la instancia del Modelo de Usuario. Además, 'locals()' tiene un nombre sospechoso; no está definido en la Vista, ¿es realmente local? – JCotton
@JCotton Usar ['locals()'] (http://docs.python.org/library/functions.html#locals) es una función incorporada. Aquí se usa como un hack para evitar tener que definir manualmente el diccionario de contexto de la plantilla. Es un ahorro de tiempo, pero probablemente sea una mejor práctica definir explícitamente el contexto. Buen punto sobre 'request.user'. – Alasdair
@Alasdair ¡gracias! no sabía eso sobre 'locals()' – JCotton