Предполагая, что у вас есть такая установка:
class UserProfile(models.Model):
user = models.ForeignKey(User, related_name='profile')
...
Вы можете использовать следующие варианты выбора: Comments.objects.select_related('user__pk','user__profile__pk')
, и это должно делать то, что вы хотите.
Вы должны будете расширить рамки комментариев. Это довольно просто. По сути, создайте свое собственное приложение для комментариев. Вы можете взглянуть на django-threadadedcomments для вдохновения (и, на самом деле, в некоторых отношениях это уже лучшая реализация для использования в любом случае).
Вот код, который вы можете вставить в приложение django-threadaded comments, чтобы убедиться, что оно всегда использует select, связанный с (в models.py):
class RelatedCommentManager(CommentManager):
def filter(self, *args, **kwargs):
return super(RelatedCommentManager, self).select_related('user__pk','user__profile__pk').filter(*args, **kwargs)
def exclude(self, *args, **kwargs):
return super(RelatedCommentManager, self).select_related('user__pk','user__profile__pk').exclude(*args, **kwargs)
def all(self)
return super(RelatedCommentManager, self).select_related('user__pk','user__profile__pk').all()
и заменить
objects = CommentManager()
с
objects = RelatedCommentManager()
Следуйте инструкциям по интеграции потоковых комментариев в ваше приложение.
Тогда, в шаблоне, я думаю, вам придется ссылаться на .profile
вместо .get_profile
.
Возможно, 1027 *, что Django автоматически учитывает это, поэтому get_profile
не будет генерировать еще один удар по дб, пока доступно .profile
.