Home > Software engineering >  Django get primary key with JSON response
Django get primary key with JSON response

Time:01-21

How do I send each objects primary key with JSON response? I am sending json response to amend a table based on users state. Everything works fine, except not being able to get the PK associated with each user.

Currently its sending all values except PK.

class UserByState(View):
page_limit = 100

def get_paginated_context(self, queryset, page, limit):
    if not page:    page = 1 
    
    if limit:   
        self.page_limit = limit  
    paginator = Paginator(queryset, self.page_limit)
    page_obj = paginator.get_page(page)
    serialized_page = serialize("json", page_obj.object_list)
    serialized_page = [obj["fields"] for obj in json.loads(serialized_page)]

    return {
        "data": serialized_page,
        "pagination": {
            "page": page,
            "limit": limit,
            "has_next": page_obj.has_next(),
            "has_prev": page_obj.has_previous(),
            "total": queryset.count()
        }
    }

def get(self, request, *args, **kwargs):
    user = self.request.user
    page = request.GET.get('page')
    limit = request.GET.get('limit')
    state = request.GET.get('state')
    
    queryset = User.objects.all()

    if state and state != "all":
        queryset = queryset.filter(state=state)

    to_return = self.get_paginated_context(queryset, page, limit)
    return JsonResponse(to_return, status = 200)
    
   

CodePudding user response:

I think this comprehension may lose some values.

serialized_page = serialize("json", page_obj.object_list)

When you call ['fields'] here:

serialized_page = [obj["fields"] for obj in json.loads(serialized_page)]

You get only values of key 'fields'. It's like standard dictionary.

fields = {"first_name": "Dan", "last_name": "ram", "address": "6090 DRAGON WAY", "city": "CREST", "state": "CA", "zipcode": 91912}

Try that:

serialized_page = serialize("json", page_obj.object_list)
serialized_page = [{**obj["fields"], **{"pk": obj["pk"]}} for obj in json.loads(serialized_page)]
  •  Tags:  
  • Related