我如何在Django中审查属性和模型字段?
我如何在Django中审查属性和模型字段?
我试图获取给定对象的所有现有模型字段和属性的列表。是否有一种干净的方法来审视对象,以便我可以获得字段和属性的字典。
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
来获取模型字段,但这并不会给我像属性这样不是真正的数据库字段的东西。
admin 更改状态以发布 2023年5月24日
如果您严格只想要模型字段和属性(那些使用property声明的字段和属性),则:\n\n
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)
\n\n此处唯一额外的部分是通过类来查找与属性描述符对应的字段。通过类访问它们会给您描述符,而通过实例访问则会给您值。