Jay Desai
Jay Desai

Reputation: 871

How to iterate over Query List of django model

I am reading a json file from a website and if the record is not in my Customers queryset I want to create a new Customer for that record. What is happening is when I iterate over the queryset, Django is trying to create a new Customer even when it is already in the queryset.

Please see my code below:

from rest_framework import generics
from customer.models import Customers
from .serializers import CustomersSerializer
import json
import urllib.request

class CustomerAPIView(generics.ListAPIView):
    j = urllib.request.urlopen("https://web.njit.edu/~jsd38/json/customer.json")
    customer_data = json.load(j)
    queryset1 = Customers.objects.values_list('CustomerId', flat=True)
    for customer in customer_data:
        if customer["@Id"] not in queryset1.iterator():
            CustomerId = customer["@Id"]
            Name = customer["Name"]
            PhoneNumber = customer["PhoneNumber"]
            EmailAddress = customer["EmailAddress"]
            StreetLine = customer["Address"]["StreetLine1"]
            City = customer["Address"]["City"]
            StateCode = customer["Address"]["StateCode"]
            PostalCode = customer["Address"]["PostalCode"]
            cus = Customers()
            cus.CustomerId = CustomerId
            cus.Name = Name
            cus.PhoneNumber = PhoneNumber
            cus.EmailAddress = EmailAddress
            cus.StreetLine = StreetLine
            cus.City = City
            cus.StateCode = StateCode
            cus.PostalCode = PostalCode
            cus.save()
    queryset = Customers.objects.all()
    serializer_class = CustomersSerializer

Upvotes: 0

Views: 167

Answers (1)

dirkgroten
dirkgroten

Reputation: 20702

Your JSON is returning strings for the "@Id" key, I'm assuming your model Customers has integers as CustomerId field.

You should convert them to str or int:

if int(customer["@Id"]) not in queryset1:
    ...

Upvotes: 1

Related Questions