Djongo操作MongoDB新增字段

Djongo操作MongoDB新增字段

摘要:Djongo作为Django的扩展,支持Django原生语法操作MongoDB。但是我现在有一个需求,那就是能够在不修改models.py的情况下,对模型类的对象新增一个字段并赋值,同时,其他的数据直接获得这个新字段,并自动赋空值。这也是利用了MongoDB非关系型数据库的优势。

关键词:Django,Djongo,MongoDB,Python,ENFORCE_SCHEMA

  1. 先说结论:行,但不完全行。

  2. 什么意思呢,我们先看官方文档-Get Started

    在这里插入图片描述

    • 搜索这个问题的程序员们肯定搜到这儿了,看了 ENFORCE_SCHEMA 这个字段的作用,一看Default,淦,默认的就是False了,怎么还是不行?

      (Default) Implicitly creates collections. Returns missing fields as None instead of raising an exception.

    • 看到这儿很高兴,是不是这个描述就已经实现了你的需求了,别急,往下看。

  3. 继续搜索这个关键字:ENFORCE_SCHEMA,我们想知道这个效果到底是怎么实现的呢?我搜遍了全网也没找到实现的Demo,只是在描述中略见星光。

    在这里插入图片描述

    • 描述很舒服

      You can add and exclude fields per entry and MongoDB will not complain. This can make life easier, especially when there are frequent changes to the data model.

    • 看到样例之后

      The modified Model can be saved without running any migrations.

    • 也就是说,不经过任何迁移,修改的模型,也能被保存

    • 再看最后的描述

      ENFORCE_SCHEMA: False works by silently setting the missing fields with the value None. If your app is programmed to expect this (which means it is not a bug) you can get away by not calling any migrations.

    • 也就是说,通过这种设置,也就是默认的设置:

      不用做任何迁移,改变models.py,也可以实现增减字段的效果

  4. 结论:

    • 单纯的在views中操作变量的属性,比如新增一个没有的属性 s.temp = '啊吧啊吧',然后 s.save(),这样做是行不通的。
    • 而是要去修改 models.py 中类的属性,即使不进行迁移,也不影响新数据的存储。

  • ☁️ 我的优快云:https://blog.youkuaiyun.com/qq_21579045
  • ❄️ 我的博客园:https://www.cnblogs.com/lyjun/
  • ☀️ 我的Github:https://github.com/TinyHandsome
  • 🌈 我的bilibili:https://space.bilibili.com/8182822
  • 🥑 我的思否:https://segmentfault.com/u/liyj
  • 🍅 我的知乎:https://www.zhihu.com/people/lyjun_
  • 🐧 粉丝交流群:1060163543,神秘暗号:为干饭而来

碌碌谋生,谋其所爱。🌊 @李英俊小朋友

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李英俊小朋友

没事啦!白嫖不要紧啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值