2010-10-14 52 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)。

相關問題