Изменение модели с помощью Celery и списка запросов Json

У меня есть модель и запрос json списка dicts из api и мне нужно добавить или изменить предмет в этой модели

Но я не уверен, что мой код правильный, использую celery и он получил ошибку: " counter_party = CounterParty.objects.get(GUID=item['CounterpartyGUID']) KeyError: 'GUID'"

Я пробовал и pydantic, но так и не смог решить эту проблему

models.py

class CounterParty(models.Model):
    GUID = models.UUIDField(default=uuid.uuid4, editable=True, unique=True)
    name = models.CharField(max_length=150)
    customer = models.BooleanField(default=False)
    contractor = models.BooleanField(default=False)

    class Meta:
        verbose_name_plural = 'Counter Party'

tasks.py

from u.celery import *
from .models import CounterParty
import requests
from requests.auth import HTTPBasicAuth


@app.task
def create_counter_party():
    response = requests.get("http://1c-prod-un/bp3/hs/BpAPI/WebApp/GetListCounterparty",
                            auth=HTTPBasicAuth('#some-login', '#some-pass'))
    rep = response.json()

    try:
        for item in rep:
            counter_party = CounterParty.objects.get(GUID=item['CounterpartyGUID'])
            for key, value in item.values():
                setattr(counter_party, key, value)
            counter_party.save()
    except CounterParty.DoesNotExist:
        for item in rep:
            new_values = {'GUID': item['CounterpartyGUID'], 'name': 
                          item['CounterpartyName'],
                          'customer': item['Customer'],
                          'contractor': item['Contractor']}
            new_values.update(item)
            counter_party = CounterParty(**new_values)
            counter_party.save()



json-запрос от api:

[
    {
        "CounterpartyGUID": "#some-uuid",
        "CounterpartyName": "name1",
        "Customer": false,
        "Contractor": true
    },
    {
        "CounterpartyGUID": "#some-uuid",
        "CounterpartyName": "name2",
        "Customer": false,
        "Contractor": true
    },
]
Вернуться на верх