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

Django EmbeddedField因字段与列名不一致触发验证错误的解决方法

解决Djongo EmbeddedField字段名与db_column不一致的验证错误

问题根源是Djongo原生EmbeddedField会强制验证容器模型的字段名与db_column必须一致,而你的场景需要模型保留snake_case的name,同时适配数据库中已有的camelCaseName字段。可以通过自定义字段跳过该验证逻辑来解决:

步骤1:创建自定义EmbeddedField

继承Djongo的EmbeddedField,重写_validate_container方法,移除字段名与db_column的一致性检查:

from django.db import models
from djongo.models.fields import EmbeddedField
from django.core.exceptions import ValidationError

class CustomEmbeddedField(EmbeddedField):
    def _validate_container(self, model_container):
        # 保留基础验证:确保容器是Model子类
        if not issubclass(model_container, models.Model):
            raise ValidationError(
                'Model container must be a subclass of models.Model'
            )
        # 跳过字段名与db_column不一致的检查(原验证逻辑就在此处)
        return model_container

步骤2:在模型中使用自定义字段

将Entry模型中的EmbeddedField替换为自定义的CustomEmbeddedField:

class Blog(models.Model):
    _id = models.ObjectIdField()
    name = models.CharField(max_length=100, db_column="Name")
    tagline = models.TextField()

class Entry(models.Model):
    _id = models.ObjectIdField()
    blog = CustomEmbeddedField(
        model_container=Blog
    )

此方案既保留了模型字段的snake_case命名规范,又能正确映射数据库中已有的camelCase字段,同时绕过了Djongo的强制验证逻辑。

内容的提问来源于stack exchange,提问作者StuffHappens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:30:31