2017-03-11 38 views
0

我在Django中有一個數據模型,用於保存用戶上傳的照片。在Photo模型(ImageField類型)中有一個稱爲image_file的屬性,其中存儲了圖像的url。例如,我可以在模板(和視圖)中使用item.image_file.url成功訪問此URL。通過Django查詢集上的values()方法訪問ImageField的url

不過,我似乎無法能夠做到的觀點如下:

Photo.objects.filter(owner=user).order_by('-id').values('id','image_file.url')[:10]

即對於特定的用戶,我試圖將10個最新的照片對象的圖像網址與對象ID一起獲得。這給了我FieldError: Cannot resolve keyword 'image_file.url' into field。這不應該有效嗎?

我知道我可以檢索整個對象並在模板中進行過濾,但是我覺得它更適合單獨檢索我實際需要的字段而不是完整的對象。

p.s.這是一個PostgreSQL後端和底層的存儲類已超過纏身

+0

'url'是一個'property',而不是數據庫中的值([FileField code](https://github.com/django/django/blob/master/django/db/models/fields/files .py#L61))這就是爲什麼你不能從'values()'得到它的原因。據我所知,你必須單獨得到url值... –

+0

這就是我要做的 - 你可能想看看['only()'](https:// docs。但是djangoproject.com/en/1.10/ref/models/querysets/#only)。如果你走這條路線,你應該用[Django調試工具欄](https://github.com/jazzband/django-debug-toolbar)來觀察SQL查詢。如果'url'屬性試圖檢索'only()'中沒有包含的字段,它可能會進行單獨的SQL調用。 –

+0

當然 - 你確定'only()'不會給你'id'嗎?我不記得那樣做,但我不明白爲什麼它不能拉它。使用'only()',你不會失去訪問任何東西的能力 - 如果你沒有指定它,你只會招致另一次SQL命中。 –

回答

1

urlproperty,而不是在數據庫(FileField code)這就是爲什麼你不能從values()得到它的值。據我所知,你必須單獨得到url的值...

雖然你可能想看看only()。如果你走這條路線,你應該用Django調試工具欄來觀察SQL查詢。如果url屬性嘗試檢索未包含在only()中的字段,它可能會進行單獨的SQL調用。