python - 不同的嵌入文档
问题描述
我目前正在尝试将我的新 Django rest API 连接到我已经存在的 mongodb 数据库。目前我正在尝试将我的数据库对象的结构复制为模型。我遇到了问题,我在我的数据库中设置了这样的结构:
{
objects: { DE: [], US: [] }
}
DE 和 US 的属性在这里可以是任何东西(任何地理)。有什么办法可以在我的 djongo 模型中加入这种模式?
解决方案
如果通过任何方式,您真正的意思是任何东西(或至少超过几种类型的数据),您可以按如下方式设置模型:
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
前面提到的;它可能会提示如何制作类似列表的数据库条目。这是它的原始代码。
希望这可以帮助!
推荐阅读
- javascript - 使用 JavaScript 在 if 语句中设置变量抛出错误(已声明)
- django - 配置不当
- firebase - Firebase Cloud 功能中禁止跨域 Null
- c++ - ::memset 在初始化大型数组时崩溃
- javascript - 我的 firebase 云函数告诉我:函数执行耗时 60004 毫秒,状态为“超时”,但为什么呢?我的代码有什么问题:(
- google-calendar-api - 关于 GC 提醒通知不起作用
- amazon-web-services - 如何在 Appsync 中使用两个 API Key 分别授权两个 graphql 字段?
- spring-boot - Spring boot - Docker 经常出现网关超时 504
- c++ - 致命错误:找不到“boost/uuid/uuid.hpp”文件
- java - 如何在 Android 应用程序中使用 Retrofit 2 使用 Spring-Boot REST API