私はユーザーがアップロードした写真を保存するデータモデルを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
ない上だらけ
'url'はデータベースの値ではなく' property'です([FileField code](https://github.com/django/django/blob/master/django/db/models/fields/files)。 .py#L61))これはあなたが 'values()'からそれを得ることができない理由です。私が見る限りでは、あなたはURLの値を別々に取得しなければならないでしょう... –
それは私がやることです - あなたは['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呼び出しを行う可能性が高くなります。 –
確かに、 'only()'はあなたに 'id'を与えないでしょうか?私はそのことを思い出してはいませんが、なぜそれを引き出すことができないのか分かりません。 'only()'を使うと、何かにアクセスする能力を失うことはありません。指定しなかった場合、別のSQLヒットが発生します。 –