Почему UserProfile
это отдельный класс? Похоже, эти поля принадлежат User
.
Вы не задаете вопрос, поэтому я почти наверняка дам частичный ответ, в лучшем случае. Надеюсь, это поможет вам.
Чтобы получить доступ к друзьям, вы можете:
profile = UserProfile.objects.get(pk=1)
friends = UserProfile.friends.all().prefetch_related('friends')
for friend in friends:
f_user = friend.user
f_friends = friend.friends.all().prefetch_related('friends')
Это будет неэффективно в масштабе, но хорошо для одиночных UserProfile
с. В противном случае cached_property может быть подходящим вариантом. На самом деле, документы кажутся похожими на вашу проблему.
Если вы получаете friends
из набора запросов UserProfile
с, вам следует .prefetch_related('friends')
class UserProfile(models.Model):
...
@cached_property
def my_friends(self):
return [f for f in self.friends.all().prefetch_related('friends')]
Использование такого понимания списка избавляет вас от попадания в БД каждый раз, если я не ошибаюсь.