Отображение объектов из запроса внутри цикла - PullRequest
1 голос
/ 03 апреля 2020

Я просто новичок ie в python и django, и я совершенно заблудился в своей текущей проблеме, эта проблема как-то не нова для некоторых, надеясь получить какое-то руководство для меня, чтобы решить эту проблему Вопрос.

Я выполнил первый запрос, чтобы получить список значений внешнего ключа, и использовал al oop, чтобы передать отдельное значение, и использовал его в качестве параметра для второго запроса. Технически я выполнил второй запрос внутри итерации l oop. Затем я использовал и получил повторные значения моего второго запроса и передал его в self.paginate_queryset, чтобы я мог его сериализовать и выдать ответ на свой get_paginated_response.

В рамках наблюдения я напечатал все результат моего второго запроса внутри указанного l oop ранее, и он работал правильно, но когда я попытался запустить его на почтальоне, я заметил, что ответ дал только один результат из моей серии результатов на основе данного l oop .

Что именно мне нужно сделать, чтобы получить все необходимые результаты?

Не стесняйтесь также вносить любые предложения, если вы заметили что-то в моих кодах, которые нуждаются в улучшении.

Вот моя функция в views.py :

def get(self, request, *args, **kwargs):
    global friend, request_queries
    self.pagination_class = PageNumberPagination

    friends = Friend.objects.filter(from_user=request.user.pk)
    for friend in friends:
        request_queries = GosamFriendProfile.objects.raw("""SELECT *
                            FROM gosam_friend_profile
                            INNER JOIN friendship_friend ON gosam_friend_profile.gosam_friends_id = friendship_friend.id
                            INNER JOIN profile ON gosam_friend_profile.profile_id = profile.id
                            WHERE profile.id = %s
                            ORDER BY profile.first_name""" % friend.to_user_id)

    query_set = self.paginate_queryset(request_queries)
    serializer = GosamFriendProfileSerializer(query_set, many=True)

    return self.get_paginated_response(serializer.data)

сериализатор :

 class GosamFriendProfileSerializer(serializers.ModelSerializer):

    class Meta:

        model = GosamFriendProfile
           fields = '__all__'
           depth = 1

модель GosamFriendProfile

  # Junction Table for Gosam Friends and Profile
  class GosamFriendProfile(models.Model):
     gosam_friends = models.ForeignKey(Friend, 
       on_delete=models.CASCADE, null=False)
     profile = models.ForeignKey(Profile, on_delete=models.CASCADE, 
       null=False)

     class Meta:
       db_table = 'gosam_friend_profile'

1 Ответ

1 голос
/ 03 апреля 2020

Я сделал несколько предложений в комментариях, но ответ на ваш вопрос заключается в том, что вы просматриваете friends и присваиваете новую переменную внутри l oop с именем request_queries. Каждый раз, когда он зацикливается, вы переназначаете переменную. Поэтому, когда вы делаете query_set = self.paginate_queryset(request_queries), вы только передаете результат вашей последней итерации для l oop.

Просто примечание, чтобы изменить это:

    for friend in friends:
        request_queries = GosamFriendProfile.objects.raw("""SELECT *
                            FROM gosam_friend_profile
                            INNER JOIN friendship_friend ON gosam_friend_profile.gosam_friends_id = friendship_friend.id
                            INNER JOIN profile ON gosam_friend_profile.profile_id = profile.id
                            WHERE profile.id = %s
                            ORDER BY profile.first_name""" % friend.to_user_id)

На это без для л oop.

request_queries = GosamFriendProfile.objects.filter(
    gosam_friends__in=friends,
).select_related('profile', 'friend').order_by('profile__first_name')
...