【发布时间】:2021-07-04 10:14:37
【问题描述】:
我正在使用djongo 将我的 Django Rest Framework 项目连接到 MongoDB,
由于 MongoDB 使用 _id 作为其主键,我将模型更改如下:
from djongo import models
class MyModel(models.Model):
_id = models.ObjectIdField(primary_key=True)
name = models.CharField(max_length=200)
当我从数据库中查询数据时,_id 的类型将是bson.objectid.ObjectId
所以任何时候我想查询任何东西,我都应该这样做:
from bson.objectid import ObjectId
from myapp.models import MyModel
MyModel.objects.get(pk=ObjectId('606e91bd371197379e9bf919'))
# or
MyModel.objects.filter(_id=ObjectId('606e91bd371197379e9bf919'))
如果我使用MyModel.objects.filter(pk='606e91bd371197379e9bf919'),它将无法在数据库中找到数据
任何查询都需要这个额外的ObjectId,这会产生很多问题,因为没有一个预先存在的类(如表单、视图、Django Rest Framework 序列化器......)像这样,所以我应该覆盖所有其中,这会导致许多代码重复,
有没有办法覆盖任何Q/QuerySet/Model/Model Meta Class 或包装器或其他任何东西来应用额外的ObjectId 来查询pk/id/@ 987654336@字段并解决这个问题?
有更好的方法吗?
【问题讨论】:
标签: django mongodb django-rest-framework django-orm djongo