﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
32524	unexpected behavior when using gettattr for related object	elonzh	nobody	"Assuming we have a model like that:

{{{
class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name=""profile"", on_delete=models.CASCADE)
    ...
}}}

An user may not have an UserProfile instance so we will use such logic:

{{{
profile = getattr(request.user, ""profile"", UserProfile(user=request.user))
}}}

But django will always return the default value no matter `request.user.profile` exists or not.

Here is the poc:

{{{
In [1]: u = User.objects.get(username='s')

In [2]: u.profile
Out[2]: <UserProfile: UserProfile object (5)>

In [3]: getattr(u, 'profile', UserProfile())
Out[3]: <UserProfile: UserProfile object (5)>

In [4]: getattr(u, 'profile', UserProfile(user=u))
Out[4]: <UserProfile: UserProfile object (None)>

}}}

the problem is `UserProfile(user=u)` will update the `User.profile` when we init `UserProfile`.


"	Bug	new	Database layer (models, ORM)	3.1	Normal				Unreviewed	0	0	0	0	0	0
