使用 Django 时如何在 MongoDB 中使用不同的键名?

Posted

技术标签:

【中文标题】使用 Django 时如何在 MongoDB 中使用不同的键名?【英文标题】:How to use different key name in MongoDB while working with Django? 【发布时间】:2022-01-19 16:08:58 【问题描述】:

我正在使用 Django 开发一个微服务,我使用 MongoDB 作为后端。

编写主要代码的人使用 java,因此 MongoDB 集合中已经存在的数据遵循驼峰模式,例如firstName 是键名。

现在在使用 python 时,我喜欢使用像 first_name 和 get_first_name() 这样的蛇形外壳来命名我的变量和函数。

我想要的是在代码中,我想在任何地方都将名字称为 first_name,但是在保存/更新 DB 中的名字以及返回用户数据的 JSON 响应时,我想将其作为名字返回?

有没有办法实现这种行为?请帮帮我?

【问题讨论】:

【参考方案1】:

使用db_column 作为模型字段构造函数中的参数,如下所述: https://docs.djangoproject.com/en/4.0/ref/models/fields/#db-column

编辑:关于 API 输出,您有两种可能性,使用串行器或 .values() 函数。

带有 django-restframework 的序列化器:

from rest_framework import serializers

class CommentSerializer(serializers.Serializer):
    email = serializers.EmailField()
    content = serializers.CharField(max_length=200)
    created = serializers.DateTimeField()

serializer = CommentSerializer(comment)
serializer.data
# 'email': 'leila@example.com', 'content': 'foo bar', 'created': '2016-01-27T15:17:10.375877'

https://www.django-rest-framework.org/api-guide/serializers/

.values(): Blog.objects.values('id', 'name') 其中参数定义输出键值,https://docs.djangoproject.com/en/4.0/ref/models/querysets/#values

【讨论】:

感谢您的回答。但是我应该如何解决问题的另一部分。因为在序列化程序中我将变量称为 first_name,django 将以相同的方式返回它。从 API 返回响应时,有什么方法可以将其更改为 firstName? 那么你的api输出应该又是camelCase了吧? 是的,API的输出应该是驼峰式的。 简而言之,在 python 代码中,它应该像 first_name 一样使用蛇形大小写,但在 DB 内部(这部分已解决),在 API 的输出中,它应该像 firstName 一样使用驼峰大小写 好的,现在我明白了,有两种可能性,我将把它们包括在我的答案中

以上是关于使用 Django 时如何在 MongoDB 中使用不同的键名?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何自动填充一个字段并在 django 中使其只读?

如何在 Django Administration 中使文本加粗

使用 Django 使用 MongoDB 时如何在对象内创建数组?

如何在 Django 中使 m2m_changed 信号原子化?

我可以在 Django 1.3 中使 STATICFILES_DIR 与 STATIC_ROOT 相同吗?

在 Django 中使迁移有条件