В команде Django создаются дубликаты записей

У меня проблемы с этой функцией, которая создает дубликаты записей. У меня есть несколько страниц с документами, которые содержат ответ с document в виде списка записей. Каждая страница содержит разное количество документов в этом списке. Когда все записи создаются в базе данных, она начинает их дублировать, потому что количество страниц превышает количество страниц, на которых есть документы.

Вот как выглядит ответ для каждой страницы:

{

    "page": 3,

    "limit": 10,

    "count": 2,

    "machines": [

        {

            "document_id": "1234",

            "location": "123 Random address",

            "location_name": "Scraton",

            "location_coordinates": {

                "latitude": 54.443454,

                "longitude": -124.9137471

            },

        {

            "document_id": "1235",

            "location": "124 Random address",

            "location_name": "New York",

            "location_coordinates": {

                "latitude": 233.385037,

                "longitude": -40.1823481

            },

       ]

}

Вот функция, которая создает дубликаты.

def sync_all_documents(limit=1000, page_start=0,page_end=10):

  for page in range(page_start, page_end):

    try:

      response_data = get_documents(limit=limit, page=page)

      logger.info(f"Page Count: {response_data['count']}")

      if(response_data['count'] == 0):

        return





    except RequestError as ex:

      return # loop short circuits here



 

    try:

      documents = response_data[“documents”]

      for document in documents:

        # STEP 1 - Location

        try:

          serialized_location = serialize_location_information(document)

          location, l_created = Location.objects.get_or_create(

            latitude=serialized_location["latitude"],

            longitude=serialized_location["longitude"],

            defaults={

              "country": serialized_location["country"],

              "state": serialized_location["state"],

              "city": serialized_location["city"],

              "street_address": serialized_location["street_address"],

              "postal_code": serialized_location["postal_code"],

              "name": serialized_location["name"],

              "status": serialized_location["status"],

            }

          )

          if l_created:

        except Exception as ex:

          location = None

          pass



        # STEP 2 - Document

        try:

          serialized_document = serialize_document_information(document)

          document, m_created = Document.objects.update_or_create(

            atm_id=serialized_document[“document_id"],

            defaults={

              "provider": serialized_document[“provider"],

              "status": serialized_document[“status"],

              "location": location,

            }

          )

          if m_created:

            logger.info(f"New Document was created successfully")

        except Exception as ex:

          logger.error("Could not update/create Document)

          pass # continue looping

    except Exception as ex:

      logger.error(“Document does not exist")

      return # loop short circuits here 

  return "sync completed"

Вернуться на верх