Changes between Initial Version and Version 2 of Ticket #8660
- Timestamp:
- Aug 28, 2008, 5:52:22 PM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ticket #8660
- Property Triage Stage Unreviewed → Accepted
-
Ticket #8660 – Description
initial v2 1 When you use the User.get_profile() method to fetch a profile object, it doesn't pre-populate profile's user attribute. This results in unnecessary DB queries when you go from User -> UserProfile and then later go from UserProfile -> User. This is actually a fairly common use case because people tend to attach methods that "extend" the user object in UserProfile, since they can't directly extend User.1 When you use the User.get_profile() method to fetch a profile object, it doesn't pre-populate profile's user attribute. This results in unnecessary DB queries when you go from User -> `UserProfile` and then later go from `UserProfile` -> `User`. This is actually a fairly common use case because people tend to attach methods that "extend" the user object in UserProfile, since they can't directly extend User. 2 2 3 For example, if you create a full_name() method on UserProfile that returns '%s %s' % (self.user.first_name, self.user.last_name), then in your templates, you do {{ User.get_profile.full_name}}, you end up doing two DB queries when only one in necessary.3 For example, if you create a `full_name()` method on `UserProfile` that returns {{{'%s %s' % (self.user.first_name, self.user.last_name)}}}, then in your templates, you do {{{ {{ User.get_profile.full_name }} }}}, you end up doing two DB queries when only one in necessary. 4 4 5 5 The solution seems simple enough since the profile's User object must be called `user`. In django/contrib/auth/models.py a one liner after fetching the profile should do the trick: