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

如何在Django+Mongo项目中手动定义模型ID字段?

在Django(djongo)中为MongoDB手动定义模型ID字段

要实现通过Django admin面板正常编辑、删除MongoDB中的数据,需手动映射MongoDB的主键字段到Django模型,具体操作如下:

1. 修改模型的ID字段定义

使用djongo提供的ObjectIdField对应MongoDB默认的_id主键,修改后的模型代码如下:

from djongo import models
from bson import ObjectId

class Category2(models.Model):
    # 手动定义ID字段,映射MongoDB的_id
    id = models.ObjectIdField(primary_key=True, default=ObjectId, editable=False)
    name = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, unique=True)
    price = models.PositiveIntegerField()

    class Meta:
        ordering = ('name',)

    def __str__(self):
        return self.name

参数说明:

  • primary_key=True:将该字段设为模型主键,与MongoDB的_id对应
  • default=ObjectId:让MongoDB自动生成标准的ObjectId值,无需手动传入
  • editable=False:禁止在Django admin中编辑该字段,避免破坏MongoDB的数据结构

2. 同步模型到数据库

运行以下命令完成模型变更的迁移:

python manage.py makemigrations
python manage.py migrate

3. 注册模型到Admin面板

在项目的admin.py中注册模型,才能在后台进行管理操作:

from django.contrib import admin
from .models import Category2

admin.site.register(Category2)

可选:手动指定ID值

如果需要自行控制ID生成逻辑,可移除default=ObjectId参数,但创建对象时必须显式传入符合ObjectId格式的id值,示例:

from bson import ObjectId

# 手动传入自定义ID
category = Category2(id=ObjectId(), name="示例分类", slug="sample-category", price=200)
category.save()

内容的提问来源于stack exchange,提问作者Hossein A.J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:21:05