首页 > 解决方案 > 不同的嵌入文档

问题描述

我目前正在尝试将我的新 Django rest API 连接到我已经存在的 mongodb 数据库。目前我正在尝试将我的数据库对象的结构复制为模型。我遇到了问题,我在我的数据库中设置了这样的结构:

{
  objects: { DE: [], US: [] }
}

DE 和 US 的属性在这里可以是任何东西(任何地理)。有什么办法可以在我的 djongo 模型中加入这种模式?

标签: pythondjongo

解决方案


如果通过任何方式,您真正的意思是任何东西(或至少超过几种类型的数据),您可以按如下方式设置模型:

from djongo import models

...

ObjectDataModel(models.Model):
    US = models.ListField()
    DE = models.ListField()

    class Meta:
        abstract = True  # Stops a database table from being made

...

YourModel(models.Model):
    objects = models.ArrayModelField(model_container=ObjectDataModel)

如果您希望 ListFields 不只是在阳光下接受任何东西,您还可以添加自定义验证;这是如何做到的

注意:这使得该objects字段完全无法通过 Django Admin 网站访问;这仅仅是因为管理站点不可能代表 ListField 可能能够为用户处理的所有可能的输入类型(但是,您仍然可以通过表单/视图向字段提交值)。

如果您有时间,您还可以设计自定义字段。我(遗憾地)对这个geo领域不是很熟悉,所以我会在这里向你指出如何去做。你可能还想看看 Djongo 的作者是如何实现ListField前面提到的;它可能会提示如何制作类似列表的数据库条目。这是它的原始代码

希望这可以帮助!


推荐阅读