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, который работает безупречно
Вернуться на верх