Добавление или изменение объекта в модели Django с помощью json requests list
Есть модель и json request list of dicts от api и мне необходимо внести данные или поменять уже существующие (если такой объект по uuid есть) в мою модель
Не уверен в принципе,что мой код верен, но использую celery и выдаёт ошибку: " counter_party = CounterParty.objects.get(GUID=item['CounterpartyGUID']) KeyError: 'GUID'"
Был бы очень благодарен, если бы кто-то помог разобраться с данной задачей
Пытался также использовать пакет pydentic, но и с ним я ничего конкретного не смог
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 request from an api:
[
{
"CounterpartyGUID": "#some-uuid",
"CounterpartyName": "name1",
"Customer": false,
"Contractor": true
},
{
"CounterpartyGUID": "#some-uuid",
"CounterpartyName": "name2",
"Customer": false,
"Contractor": true
},
]
full error:
[2023-01-27 17:48:56,738: ERROR/ForkPoolWorker-3] Task authentication.tasks.create_counter_party[d010bb7b-9304-4e50-aac2-3c1032654f90] raised unexpected: KeyError('GUID')
Traceback (most recent call last):
File "/home/knefedov/PycharmProjects/unica_b2b_1/venv/lib/python3.10/site-packages/celery/app/trace.py", line 451, in trace_task
R = retval = fun(*args, **kwargs)
File "/home/knefedov/PycharmProjects/unica_b2b_1/venv/lib/python3.10/site-packages/celery/app/trace.py", line 734, in __protected_call__
return self.run(*args, **kwargs)
File "/home/knefedov/PycharmProjects/unica_b2b_1/authentication/tasks.py", line 20, in create_counter_party
counter_party = CounterParty.objects.get(GUID=item['CounterpartyGUID'])
KeyError: 'GUID'