将_id从ObjectId更改为普通的唯一自动递增整数



我对Django和web开发很陌生,所以在我学习的过程中,所有这些对我来说都是新的。

我最近安装了Django站点,并使用Postgresql。当我创建它时,我处理了一些复杂的事情,需要专门使用Postgresql,因为它有一个SQLite没有的字段。无论如何,我将重做它(v2(,并希望转换为MongoDB。现在我已经设置好了所有内容,但我注意到,当我在管理面板中从模型中创建新项目时,它会在数据库中获得_id:ObjectId("61ba69238db76b91b4bf42f1")。我猜这是主要的钥匙?然而,根据我的理解,Django正在寻找一个正常的整数值。因此,当我试图删除或修改东西时,它会给我错误:Field 'id' expected a number but got 'None'.

我应该创造我自己的";id";每个模型的字段?是否应该/可以使用默认的_id字段?

谢谢!

在MongoDB中,存储在集合中的每个文档都需要一个唯一的_id充当主键的字段。

_id字段文档。

&quot_id";字段总是在mongo集合中。如果您没有明确地提供"_id";你的模型中的字段如下:

_id = djongo_models.ObjectIdField()

然后你就无法从djongo那里查询了。如果您没有提供任何标记为primary_key的字段,那么djongo将帮助您并为您提供

id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')

您可以在迁移文件中检查它。Djongo也为这个领域制作了一个独特的索引。所以你最终会得到两个唯一的索引,一个是&quot_id";它是bson ObjectId,第二个是"bson";id";其将是一个有序的整数。如果你有自动场";id";由你或djongo在幕后添加,你应该能够通过";id";类似:

YourModel.objects.filter(id=1).delete()

所以你不需要添加";id";菲尔德,琼戈会为你做的。并且"_id";字段将始终在mongo集合中,您可以忽略它或将它添加到模型中,然后使用它(查询(。

最新更新