django 将模型实例转换为 dict
Posted
技术标签:
【中文标题】django 将模型实例转换为 dict【英文标题】:django convert model instance to dict 【发布时间】:2015-04-29 17:11:40 【问题描述】:我是 Django 的初学者。而且我需要将 Model 实例转换为类似于 Model.objects.values 的字典,并带有关系字段。所以我写了一个小函数来做到这一点:
def _get_proper(instance, field):
if field.__contains__("__"):
inst_name = field.split("__")[0]
new_inst = getattr(instance, inst_name)
next_field = "__".join(field.split("__")[1:])
value = _get_proper(new_inst, next_field)
else:
value = getattr(instance, field)
return value
def instance_to_dict(instance, fields):
return key: _get_proper(instance, key) for key in fields
所以,我可以这样使用它:
user_obj = User.objects.select_related(...).get(...)
print instance_to_dict(user_obj, ["name", "city__name", "city_id"])
您能提出更好的解决方案吗?谢谢! 附言对不起我的英语。
【问题讨论】:
Convert Django Model object to dict with all of the fields intact的可能重复 【参考方案1】:This actually already exists in Django, but its not widely documented.
from django.forms import model_to_dict
my_obj = User.objects.first()
model_to_dict(my_obj,
fields = [...], # fields to include
exclude = [...], # fields to exclude
)
【讨论】:
我知道,但是这个功能不适用于city__name
等相关字段
链接失效。这是更新的链接:timsaylor.com/convert-django-model-instances-to-dictionaries
链接中的链接(指向源代码)是github.com/django/django/blob/master/django/forms/models.py#L70以上是关于django 将模型实例转换为 dict的主要内容,如果未能解决你的问题,请参考以下文章
django的模型类管理器-----------数据库操作的封装