gpt4 book ai didi

python - 我如何反射(reflection) Django 中的属性和模型字段?

转载 作者:太空狗 更新时间:2023-10-29 20:52:52 24 4
gpt4 key购买 nike

我正在尝试获取给定对象的所有现有模型字段和属性的列表。是否有一种干净的方法来检查对象,以便我可以获得字段和属性的字典。

class MyModel(Model)
url = models.TextField()

def _get_location(self):
return "%s/jobs/%d"%(url, self.id)

location = property(_get_location)

我想要的是返回一个看起来像这样的字典:

{
'id' : 1,
'url':'http://foo',
'location' : 'http://foo/jobs/1'
}

我可以使用 model._meta.fields 来获取模型字段,但这并没有给我属性但不是真实数据库字段的东西。

最佳答案

如果您只需要模型字段和属性(使用属性声明的那些),那么:

def get_fields_and_properties(model, instance):
field_names = [f.name for f in model._meta.fields]
property_names = [name for name in dir(model) if isinstance(getattr(model, name), property)]
return dict((name, getattr(instance, name)) for name in field_names + property_names)

instance = MyModel()
print get_fields_and_properties(MyModel, instance)

此处唯一额外的部分是运行 以查找与属性描述符对应的字段。通过类访问它们会给出描述符,而通过实例它会为您提供值。

关于python - 我如何反射(reflection) Django 中的属性和模型字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4930414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com