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

Djongo框架下Django admin提示Company ID为None不存在的修复方法

问题根因

Django默认会为未显式声明主键的模型自动创建一个整数类型的id字段作为主键,但MongoDB中文档的默认主键是名为_id的ObjectId类型字段,二者映射不匹配导致Django无法正确读取到主键值,所以后台显示ID为None,编辑时找不到对应对象。

修复步骤

1. 修正models.py定义

你需要显式声明主键字段,映射MongoDB的_id字段,如果你使用的是djongo作为Django-MongoDB连接后端,修改代码如下:

# 注意导入的是djongo的models而非django原生的models
from djongo import models

class Company(models.Model):
    # 显式声明主键,映射MongoDB的_id字段
    id = models.ObjectIdField(primary_key=True, db_column='_id')
    name = models.CharField(max_length=100, blank=False, null=False, unique=True)

如果你使用的是其他MongoDB连接后端(如django-mongodb-engine),仅需调整对应ObjectId字段的导入即可,映射逻辑不变。

2. 可选:优化admin后台显示

修改admin.py,在列表页直接展示ID和名称,提升可读性:

from django.contrib import admin
from .models import Company

@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
    list_display = ('id', 'name')

3. 生效配置

删除应用下旧的迁移文件(migrations目录下除__init__.py之外的文件),重新执行迁移命令即可:

python manage.py makemigrations
python manage.py migrate

修改完成后Django就能正确识别MongoDB中的主键,后台不会再显示object(None),编辑也不会报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:30:02