From 4180a7a101709af5f173da9f6546e215df1ae53f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 24 Jun 2010 10:56:04 -0500 Subject: [PATCH 1/2] Fixes for Django 1.2 --- avatar/models.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/avatar/models.py b/avatar/models.py index 4875776..3bd0e8c 100644 --- a/avatar/models.py +++ b/avatar/models.py @@ -26,6 +26,7 @@ from avatar import AVATAR_STORAGE_DIR, AVATAR_RESIZE_METHOD, \ AVATAR_HASH_USERDIRNAMES, AVATAR_HASH_FILENAMES, \ AVATAR_THUMB_QUALITY + def avatar_file_path(instance=None, filename=None, size=None, ext=None): tmppath = [AVATAR_STORAGE_DIR] if AVATAR_HASH_USERDIRNAMES: @@ -71,15 +72,17 @@ class Avatar(models.Model): def __unicode__(self): return _(u'Avatar for %s') % self.user - def save(self, force_insert=False, force_update=False): - avatars = Avatar.objects.filter(user=self.user).exclude(id=self.id) + def save(self, *args, **kwargs): + avatars = Avatar.objects.filter(user=self.user) + if self.pk: + avatars = avatars.exclude(pk=self.pk) if AVATAR_MAX_AVATARS_PER_USER > 1: if self.primary: avatars = avatars.filter(primary=True) avatars.update(primary=False) else: avatars.delete() - super(Avatar, self).save(force_insert, force_update) + super(Avatar, self).save(*args, **kwargs) def thumbnail_exists(self, size): return self.avatar.storage.exists(self.avatar_name(size)) From c57a7499fb1ef2fb1ac281c9f8946111c3bafc21 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 24 Jun 2010 10:59:14 -0500 Subject: [PATCH 2/2] Do significantly fewer SQL queries here. --- avatar/util.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/avatar/util.py b/avatar/util.py index 4a63e30..c2f5cb4 100644 --- a/avatar/util.py +++ b/avatar/util.py @@ -23,15 +23,15 @@ def get_primary_avatar(user, size=80): user = User.objects.get(username=user) except User.DoesNotExist: return None - avatars = user.avatar_set.order_by('-date_uploaded') - primary = avatars.filter(primary=True) - if primary.count() > 0: - avatar = primary[0] - elif avatars.count() > 0: - avatar = avatars[0] - else: + try: + # Order by -primary first; this means if a primary=True avatar exists + # it will be first, and then ordered by date uploaded, otherwise a + # primary=False avatar will be first. Exactly the fallback behavior we + # want. + avatar = user.avatar_set.order_by("-primary", "-date_uploaded")[0] + except IndexError: avatar = None if avatar: if not avatar.thumbnail_exists(size): avatar.create_thumbnail(size) - return avatar \ No newline at end of file + return avatar