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

如何禁用djongo默认主键?升级djongo1.3.6后重复主键报错如何解决

报错原因

djongo 1.3.6 版本默认会将所有ObjectIdField类型的字段自动标记为primary_key=True,无需显式声明。你当前的模型代码同时定义了ObjectIdField类型的_id字段,和显式标记了primary_key=True的event_id字段,相当于一个模型存在两个主键,因此触发models.E026报错。

解决方案

根据你的业务需求,任选以下一种方式修改即可:

  • 不需要保留_id字段:直接删除模型中_id = models.ObjectIdField()这一行即可。Django检测到你已经显式定义了主键字段,不会自动生成默认主键,djongo也不会额外插入_id作为主键。
  • 需要保留_id字段:给_id字段显式添加primary_key=False参数,覆盖djongo的默认逻辑,修改后的代码如下:
# some_app/some_class.py 

from djongo import models


class Some_Class(models.Model):
    _id = models.ObjectIdField(primary_key=False)
    event_id = models.IntegerField(primary_key=True) 
    league = models.CharField(max_length=512)
    event_date = models.IntegerField()
    event_text = models.CharField(max_length=512)
    event_group_id = models.IntegerField()
    group_name = models.CharField(max_length=512)

修改完成后重新执行makemigrations和migrate命令即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:30:01