DRF Pymongo - Операция POST Body insert_one
Я пытаюсь использовать insert_one
для вставки документа JSON в коллекцию. JSON поступает из тела POST. Я использую простое представление и сериализатор для проверки данных, а затем пытаюсь вставить их в коллекцию. Однако я не могу заставить эту штуку работать вообще.
class Patient(APIView):
def post(self, request, format=None):
data = JSONParser().parse(request)
print(data) # prints -> {'name': 'Jason'}
serializer = PatientSerializer(data = data)
if serializer.is_valid():
FHIR_Patients.insert_one(data) # throws error
return Response(data)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
Ошибка, которую я получаю:
Traceback (most recent call last):
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/site-packages/django/core/handlers/base.py", line 220, in _get_response
response = response.render()
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/site-packages/django/template/response.py", line 114, in render
self.content = self.rendered_content
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/site-packages/rest_framework/response.py", line 70, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context)
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/site-packages/rest_framework/renderers.py", line 99, in render
ret = json.dumps(
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/site-packages/rest_framework/utils/json.py", line 25, in dumps
return json.dumps(*args, **kwargs)
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/json/__init__.py", line 234, in dumps
return cls(
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/site-packages/rest_framework/utils/encoders.py", line 67, in default
return super().default(obj)
File "/opt/miniconda3/envs/oncoregistry-analytics/lib/python3.9/json/encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type ObjectId is not JSON serializable
Может ли кто-нибудь помочь? Я не могу понять, почему это не работает, когда такие вещи как следующие работают безупречно:
# this works
test = {'name': 'Jason'}
FHIR_Patients.insert_one(data)
Примечание:
FHIR_Patients
- это коллекция, определенная из:
# MongoDB Client
MongoDBClient = pymongo.MongoClient('<connection-string>')
# Databases
FHIR_Database = MongoDBClient['fhir']
# Collections
FHIR_Patients = FHIR_Database['patients']
- Тип данных
data
-<class 'dict'>
, такой же, какtest
, который работает безупречно