簡體   English   中英

Django:如何使用values_list屬性編寫GET查詢?

[英]Django: How to write a GET query, using values_list attribute?

我想查詢一個模型,對於單個實例(例如, id=1 ),但我只想返回單個字段的值( 'title' )。 我可以通過以下查詢實現此目的:

SomeModel.objects.filter(pk=1).values_list('title', flat=True)

但是getfilter更有效。 但是, values_listvalues不適用於get查詢。 理想情況下,我更願意這樣做:

SomeModel.objects.get(pk=1).values_list('title', flat=True)

但是我收到以下錯誤: AttributeError: SomeModel has no attribute 'title'

編寫此查詢的最佳方法是什么?

但是getfilter更有效。

這是不正確的。 .get(…)將生成與.filter(…) 完全相同的SQL。

使用:

SomeModel.objects.filter(pk=1)[0:1].values_list('title', flat=True)

會做你想要的,並且將具有與.get(…)完全相同的性能特征(實際上,它會更快一點,因為.get(…)檢查是否會返回多行......):

In [4]: import logging

In [5]: l = logging.getLogger("django.db")

In [6]: l.setLevel(logging.DEBUG)

In [7]: User.objects.filter(id=1)[0:1].values_list()
DEBUG:django.db.backends:(0.006) SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = 1  LIMIT 1; args=(1,)
Out[7]: [(1, u'admin', u'Admin', u'User', u'admin@example.com', u'sha1$bf3bc$daa1fb58a8a41e15c730ae86bc0faf4c01fdd3a1', True, True, True, datetime.datetime(2013, 1, 8, 21, 15, 51, 855527), datetime.datetime(2012, 1, 10, 15, 13, 55))]

In [8]: User.objects.get(id=1)
DEBUG:django.db.backends:(0.001) SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = 1 ; args=(1,)
Out[8]: <User: admin>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM