当前位置: 首页 > 知识库问答 >
问题:

如何将 Django 模型对象转换为字典,并且仍然具有它们的外键?[重复]

万嘉熙
2023-03-14

在我的Django应用程序中,如何将模型中的对象转换成包含模型对象外键引用的字典?

当我尝试这样做时:

from django.forms.models import model_to_dict
model_to_dict(instance, fields=[], exclude=[])

生成的字典只有直接字段。我还想获取与 Model 对象相关的外键。我该怎么做?

共有3个答案

汪甫
2023-03-14

我想我和你有同样的需求——我想要一个对象的简单明了的语法表示。发布的其他答案(在我写的时候)不会给我这个,序列化器虽然对他们的目的很有用,但会产生带有我不想要的额外信息的输出,以及不方便的结构。

虽然承认是一个黑客,但这给了我很多好处:

from django.core import serializers

def obj_to_dict(model_instance):
    serial_obj = serializers.serialize('json', [model_instance])
    obj_as_dict = json.loads(serial_obj)[0]['fields']
    obj_as_dict['pk'] = model_instance.pk
    return obj_as_dict

将django_model_object封装在一个列表中,然后在解析json之后访问item 0是需要的,因为出于某种原因,序列化器只能序列化模型对象的iterables(怪异)。

你需要一些额外的齿轮来处理任何类型的外键字段,如果我最终需要写它,我可能会回邮(除非有人先编辑它!)。

现在。

松钟展
2023-03-14

怎么样:

model_to_dict(instance, fields=[field.name for field in instance._meta.fields])

通过显式命名所有字段,它至少应该给你外键id(虽然我还没有验证)。

请注意,此函数不返回可编辑 = False 的字段(因为它适用于表单)。

万选
2023-03-14
obj = get_object_or_404(CustomModel,id=some_id)
my_dict = obj.__dict__
 类似资料:
  • 问题内容: 如果你是从Google来这里寻找模型的人,请跳过我的问题,然后跳到第一个答案。我的问题只会使你感到困惑。 在Django中,有没有一种很好的方法可以将整个模型对象集合到一个字典中?我的意思是,像这样: …结果是字典,键/值对由模型中的记录组成?还有其他人认为这对他们有用吗? 谢谢。 我只想添加的 更新 是,我的最终目标是能够在模板内进行简单的变量查找。就像是: 结果为DictModel

  • 问题内容: 我想将对象数组转换为javascript中具有键值对的对象。 我如何将其转换为诸如 我希望大多数浏览器都支持它。 问题答案: 您可以使用和传播语法来创建具有给定对象数组的单个对象。

  • 问题内容: 我有一个从包含重复密钥的数据库中获取的JSON字符串。我想通过将重复键的值组合到数组中来删除重复键。 例如 输入项 输出量 实际数据是一个可能嵌套的大文件。我不会提前知道有多少对。 我需要为此使用Java。org.json由于重复的键而引发异常,gson可以解析该字符串,但是每个重复的键都会覆盖最后一个。我需要保留所有数据。 如果可能的话,我想不编辑任何库代码就这样做 问题答案: 从今

  • 问题内容: 如何将Django模型对象及其所有字段转换为字典?理想情况下,所有内容都包含带有的外键和字段。 让我详细说明。假设我有一个类似以下的Django模型: 在终端中,我已执行以下操作: 我想将其转换为以下字典: 问题答案: 有多种方法可以将实例转换为字典,并具有不同程度的转角案例处理和接近所需结果的程度。 1。 instance.dict 哪个返回 到目前为止,这是最简单的方法,但是缺少,

  • 问题内容: 我有一个像这样的对象作为服务器的JSON响应返回: 我想将其转换为如下所示的JavaScript数组: 有没有最好的方法来做到这一点?无论我在哪里阅读,人们都在使用复杂的循环逻辑。那么有替代方法可以做到这一点吗? 问题答案: jQuery实际上非常简单 小提琴 在没有jQuery的情况下几乎一样容易,将键转换为数组,然后使用 小提琴 假设它已经被解析为javascript对象,并且实际

  • 问题内容: 我的模特: 我想同时保存并保存在该模型中: 我知道这是错误的,但是我敢肯定,你会明白我的意思。你会怎么做? 问题答案: 你不能从未保存的对象创建m2m关系。如果有pk,请尝试以下操作: 更新:阅读了saverio的答案后,我决定对这个问题进行更深入的研究。这是我的发现。 这是我最初的建议。它可以工作,但不是最佳选择。(注意:我使用的是和而不是s和,但你明白了。) 它总共产生7个查询: