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

Django Admin对接MongoDB时登录出现主键错误如何解决

报错原因
  • Django默认所有模型必须存在主键字段,默认会自动生成名为id的自增主键。MongoDB的默认主键为_id,当Djongo适配层没有正确完成两个字段的映射关系时,Django在登录Admin后台需要更新用户登录态调用save()方法时,会判定当前用户对象没有主键,触发对应报错。
  • 版本兼容性冲突:Django 3.2及以上版本将全局默认主键类型修改为BigAutoField,和Djongo的适配逻辑不兼容,无法自动映射为MongoDB的ObjectId类型主键。
  • 模型定义缺失主键声明:如果项目自定义了用户模型,没有显式声明主键字段,也会触发该错误。
解决方案
  1. 优先使用兼容性经过验证的版本组合,推荐搭配:Django 3.2 + Djongo 1.3.6,避免版本适配问题。
  2. 在settings.py中添加全局主键配置,统一指定Djongo封装的ObjectId作为默认主键类型:
DEFAULT_AUTO_FIELD = 'djongo.models.ObjectIdField'
  1. 若项目自定义了用户模型,需要在模型中显式声明主键字段:
from djongo import models

class User(models.Model):
    _id = models.ObjectIdField(primary_key=True)
    # 其余用户字段正常定义即可
  1. 完成配置修改后,删除MongoDB中已创建的用户集合,重新执行django-admin createsuperuser命令生成新的超级用户,确保主键映射规则生效。

修改完成后重新启动Django服务即可正常登录Admin后台。

内容的提问来源于stack exchange,提问作者David González Blazman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:04