32 python django django-models
在我的Django应用程序中,如何将模型中的对象转换为包含Model对象的外键引用的字典?
当我尝试这个:
from django.forms.models import model_to_dict
model_to_dict(instance, fields=[], exclude=[])
Run Code Online (Sandbox Code Playgroud)
生成的字典只有直接字段.我还想获得与Model对象相关的外键.我怎样才能做到这一点?
fre*_*lis 28
obj = get_object_or_404(CustomModel,id=some_id)
my_dict = obj.__dict__
Run Code Online (Sandbox Code Playgroud)
怎么样:
model_to_dict(instance, fields=[field.name for field in instance._meta.fields])
Run Code Online (Sandbox Code Playgroud)
通过显式命名所有字段,它应该至少为您提供外键ID(尽管我还没有验证).
请注意,此函数不返回带有editable=False(因为它用于表单)的字段.
我想我和你有同样的需要 - 我想要一个简单明了的dict表示对象.发布的其他答案(在我写的时候)不会给我这个,而序列化器虽然对他们的目的很有用,却产生了我不想要的额外信息的输出,以及一个不方便的结构.
虽然这是一个黑客,但这给了我很好的里程:
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
Run Code Online (Sandbox Code Playgroud)
将django_model_object包装在一个列表中,然后在解析json之后访问item 0是因为由于某种原因,序列化程序只能序列化模型对象的迭代(很奇怪).
你需要一些额外的齿轮来处理任何类型的外键字段,如果我最终需要编写它,我可能会回发(除非其他人先编辑它!).
HTH现在.
| 归档时间: |
|
| 查看次数: |
30488 次 |
| 最近记录: |