2010-10-14 28 views

回答

3

您可能还想查看queryset上的values方法。它将为任何查询返回字典,而不是通常的模型实例。

https://docs.djangoproject.com/en/1.3/ref/models/querysets/#values

(从文档)

>>> Blog.objects.filter(name__startswith='Beatles').values() 
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}] 
+0

我不记得我还需要什么......我可能需要把它变成一个字典后,我已经提取它......但如果没有,这看起来像它将是要走的路。 – mpen 2012-02-08 16:31:00

1

这是律棘手,但你可以做这样的:

def model2dict(obj): 
    return dict([(field, getattr(obj, field)) for field in obj._meta.get_all_field_names()]) 

所以,你可以访问值:

model2dict(my_model)['my_field'] 
+0

这是否意味着 “不,他们没有这样的属性”? – mpen 2010-10-19 09:11:06

+0

我认为答案是“是” – 2010-10-22 16:04:28

+0

糟糕......我屠杀了那句话。应该阅读“不,它们不具有这样的属性” - 即包含所有值的词典属性。但我认为你想通了:) – mpen 2012-02-08 16:29:05

1

他们有一个__dict__特性(这是一个标准的属性):my_model.__dict__['my_field']

但是,执行此类访问的标准方式是使用getattrgetattr(my_model, 'my_field')

参见:http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes。同时查看__slots__以了解没有此属性的类。正如Jeremy在上面指出的,任何想用django寻找的人都可能会考虑使用queryset.values()https://docs.djangoproject.com/en/dev/ref/models/querysets/#values)。

相关问题