2017-03-11 9 views
0

私はユーザーがアップロードした写真を保存するデータモデルをDjangoに持っています。ファイルImageFieldのという名前のモデルには、画像のURLが格納されているという属性があります。私は、たとえば、テンプレート(とビュー)内のitem.image_file.urlでこのURLに正常にアクセスできます。djangoクエリーセットのvalues()メソッドを使用してImageFieldのURLにアクセス

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

すなわち:

しかし、私は、ビューで次の操作を行うことができるように見えることはできません特定のユーザーのために、最新の写真オブジェクトのイメージURLとオブジェクトIDを取得しようとしています。これは私にFieldError: Cannot resolve keyword 'image_file.url' into fieldを与えます。これはうまくいかないでしょうか?

オブジェクト全体を取得してテンプレートでフィルタリングすることができますが、オブジェクト全体ではなく実際に必要なフィールドを単独で取得する方が最適だと感じました。

p.s.それはPostgreSQLのバックエンドだとurlは、あなたがvalues()からそれを得ることができない理由であるデータベース(FileField code)の値は、propertyない上だらけ

+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 Debug Toolbar](https://github.com/jazzband/django-debug-toolbar)のようなものでSQLクエリを見るべきです。 'url'プロパティが' only() 'に含まれていないフィールドを取得しようとすると、別のSQL呼び出しを行う可能性が高くなります。 –

+0

確かに、 'only()'はあなたに 'id'を与えないでしょうか?私はそのことを思い出してはいませんが、なぜそれを引き出すことができないのか分かりません。 'only()'を使うと、何かにアクセスする能力を失うことはありません。指定しなかった場合、別のSQLヒットが発生します。 –

答えて

1

基礎となるストレージクラスがされています。私が見る限り、urlの値を別途取得する必要があります。

only()を見てみるとよいでしょう。あなたがそのルートに行くなら、あなたはDjango Debug ToolbarのようなものでSQLクエリを見るべきでしょう。 urlプロパティがonly()に含まれていないフィールドを取得しようとすると、別のSQL呼び出しが行われる可能性があります。

関連する問題