You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django开发API时序列化器实例化触发两类报错如何解决?

问题描述

我在使用Django编写API时遇到以下问题:按照如下方式创建序列化器对象时:

document_serializer = DocumentSalesforceSerializer(data={
        "AccountId": patient_id,
        "ContactId": patient_id,
        "Proveedor__c": "docline",
        "Servicio_asociado__c": "report",
        "Mapfre_Id__c": patient_id,
        "Status": "In Progress",
        "StartDate": document["createdAt"],
        "EndDate": "hoy",
        "Subject": document["category"],
        "Description": description,
        "SAV_fld_source__c": "docline",
        "SAV_fld_doclineExtId__c": id,
        "SAV_fld_doctor__c": "",
    })
document_serializer.is_valid(raise_exception=True)

收到如下报错:

The translation infrastructure cannot be initialized before the apps registry is ready. Check that you don't make non-lazy gettext calls at import time.

查阅网上资料后,有用户建议删除data=参数,调整后代码如下:

document_serializer = DocumentSalesforceSerializer({
        "AccountId": patient_id,
        "ContactId": patient_id,
        "Proveedor__c": "docline",
        "Servicio_asociado__c": "report",
        "Mapfre_Id__c": patient_id,
        "Status": "In Progress",
        "StartDate": document["createdAt"],
        "EndDate": "hoy",
        "Subject": document["category"],
        "Description": description,
        "SAV_fld_source__c": "docline",
        "SAV_fld_doclineExtId__c": id,
        "SAV_fld_doctor__c": "",
    })
document_serializer.is_valid(raise_exception=True)

但此时又触发新的报错:Cannot call '.is_valid()' as no 'data=' keyword argument was passed when instantiating the serializer instance.

完整错误追溯栈

Traceback (most recent call last):
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\utils\translation\trans_real.py", line 194, in _add_installed_apps_translations
    app_configs = reversed(list(apps.get_app_configs()))
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\apps\registry.py", line 145, in get_app_configs
    self.check_apps_ready()
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\apps\registry.py", line 136, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\carlos.dcoco\Documents\savia-docl\docline-integration\debug_kafka.py", line 30, in <module>
    main()
  File "C:\Users\carlos.dcoco\Documents\savia-docl\docline-integration\debug_kafka.py", line 26, in main
    event_handler(event)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\docline-integration\app\connector\kafka_events.py", line 170, in event_handler
    event_logic(event_type, event_id)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\docline-integration\app\connector\kafka_events.py", line 158, in event_logic
    return document_ops(event, id)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\docline-integration\app\connector\kafka_events.py", line 134, in document_ops
    document_create_ops(id)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\docline-integration\app\connector\kafka_events.py", line 110, in document_create_ops
    document_serializer.is_valid(raise_exception=True)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\rest_framework\serializers.py", line 220, in is_valid
    self._validated_data = self.run_validation(self.initial_data)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\rest_framework\serializers.py", line 419, in run_validation
    value = self.to_internal_value(data)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\rest_framework\serializers.py", line 476, in to_internal_value
    validated_value = field.run_validation(primitive_value)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\rest_framework\fields.py", line 797, in run_validation
    self.fail('blank')
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\rest_framework\fields.py", line 640, in fail
    message_string = msg.format(**kwargs)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\utils\functional.py", line 135, in __wrapper__
    res = func(*self.__args, **self.__kw)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\utils\translation\__init__.py", line 94, in gettext
    return _trans.gettext(message)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\utils\translation\trans_real.py", line 355, in gettext
    _default = _default or translation(settings.LANGUAGE_CODE)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\utils\translation\trans_real.py", line 268, in translation
    _translations[language] = DjangoTranslation(language)
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\utils\translation\trans_real.py", line 155, in __init__
    self._add_installed_apps_translations()
  File "C:\Users\carlos.dcoco\Documents\savia-docl\env\lib\site-packages\django\utils\translation\trans_real.py", line 196, in _add_installed_apps_translations
    raise AppRegistryNotReady(
django.core.exceptions.AppRegistryNotReady: The translation infrastructure cannot be initialized before the apps registry is ready. Check that you don't make non-lazy gettext calls at import time.

Process finished with exit code 1
报错原因分析
  • 第一个翻译基础设施初始化报错:该问题出现在独立运行的Django脚本中,脚本启动时没有完成Django应用的注册加载流程,当序列化器字段校验不通过需要返回错误提示时,会调用Django的国际化翻译模块,而翻译模块依赖已加载完成的应用注册表,因此抛出AppRegistryNotReady异常。
  • 第二个is_valid()调用报错:Django REST Framework的序列化器设计中,只有通过data=关键字参数传入的内容才会被识别为待校验的输入数据,直接传入位置参数默认是绑定已有的ORM实例,此时序列化器没有待校验的数据源,因此无法调用is_valid()方法,网上给出的删除data=参数的建议是错误的。
解决方案

在当前运行的独立脚本最顶部,导入其他Django相关模块之前,先添加以下两行代码手动完成Django初始化即可:

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

上述代码会触发Django完整的配置加载、应用注册流程,应用加载完成后再调用序列化器逻辑就不会触发翻译初始化报错,同时保留序列化器的data=关键字参数传参即可正常调用is_valid()完成参数校验。

内容的提问来源于stack exchange,提问作者carlos de la morena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:36:05