Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

APIView Query Not Returning Any Results

I am having one of those days where the things I think are going to be easy on this project are just not turning out that way. I feel like I must be overlooking something very simple here in my frustration…

I have an APIView that passes in the a UUID to identify the "chapter" of the game story, checks to see if the current logged in user has an entry saying they completed the challenge, then if so returns the next Hunt Clue (different from the chapter challenge) or zero for me to handle in the UI.

For some reason, it is not returning any results in the query. However, when I output the raw sql query (queryset.query) the query returns the results expected just fine.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Any help greatly appreciated.

View

class GetHuntClue(APIView):

    def get(self, request, **kwargs):
        serializer_context = {
            'request': request,
        }
        chapter_uuid = self.kwargs['chapter_uuid']
        curr_user = self.request.user
        #check to make sure it's answered then provide the appropriate hunt clue.  
        log_type = GameActivityType.objects.filter(activity_type_name="Correct Challenge Answer").first()
        already_ans = GameActivity.objects.filter(user=curr_user).filter(activity_chapter=chapter_uuid).filter(activity_type=log_type).count()
        if (already_ans):
            queryset = HuntClue.objects.filter(hunt_chapter=chapter_uuid)
            print(queryset.query)
            serializer = HuntClueSerializer(queryset, context=serializer_context)
            return Response(serializer.data)            
        else:
            return HttpResponse(already_ans, content_type="text/plain")

Serializer

class HuntClueSerializer(serializers.ModelSerializer):

    class Meta:
        model = HuntClue
        #fields = '__all__'
        fields = ("id", "hunt_title", "hunt_clue", "hunt_chapter")

Model

class HuntClue(models.Model):
    hunt_title = models.CharField(max_length=100)
    hunt_clue = models.CharField(max_length=500)
    hunt_chapter = models.ForeignKey(Chapter, on_delete=models.CASCADE, null=True, blank=True, related_name="chapter_hunt_clue")

    def __str__(self):
        return '%s' % (self.hunt_title)

Raw Query:

SELECT "simgame_huntclue"."id", "simgame_huntclue"."hunt_title", "simgame_huntclue"."hunt_clue", "simgame_huntclue"."hunt_chapter_id" FROM "simgame_huntclue" WHERE "simgame_huntclue"."hunt_chapter_id" = f7ff3135-9212-47b1-a4f3-0d920c01c020

id |    hunt_title     |                 hunt_clue                  |           hunt_chapter_id            
----+-------------------+--------------------------------------------+--------------------------------------
  1 | Getting warmer... | Find the QR Code at the front of the room. | f7ff3135-9212-47b1-a4f3-0d920c01c020
(1 row)

But in the view I get an error:

AttributeError at /api/v1/gethuntclue/f7ff3135-9212-47b1-a4f3-0d920c01c020

Got AttributeError when attempting to get a value for field `hunt_title` on serializer `HuntClueSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.
Original exception text was: 'QuerySet' object has no attribute 'hunt_title'.

Very confused by this….

Thanks for any insight.

BCBB

>Solution :

You should add many=True. Because you set queryset not object.

serializer = HuntClueSerializer(queryset, context=serializer_context, many=True)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading