web-dev-qa-db-ja.com

Get Djangoモデル属性に基づくオブジェクトID

このビューを持つ「Places」という名前の基本モデルがあります。

def view_index(request, place_name):

ユーザーは、次のようなURLでそのビューにアクセスします。

http://server.com/kansas

「kansas」は、モデル「Places」内の「name」という名前のフィールドに格納されている値です。

問題は、オブジェクト名だけに基づいてオブジェクトIDを取得する方法がわからないことです。これを行う方法はありますか?

25
Oscar Carballal

このような:

place = Places.objects.get(name='kansas')
print place.id
57
gruszczy

必要なのはidだけなので、idのみをクエリする必要があります。ナイーブgetは、データベース行のすべてのフィールドを取得します。これらのメソッドはどちらも、必要なデータのみを取得します。

id = Place.objects.filter(name='kansas').values('id')[0]['id']

またはvalues_listを使用:

id = Place.objects.filter(name='kansas').values_list('id', flat=True).first()

別の方法はonlyを使用します:

id = Place.objects.only('id').get(name='kansas').id
10
Scott Stafford

そのビューのURLマッピングはどのように見えますか? "kansas"を含むURLの一部をキャプチャしていて、それがplace_name引数に設定されているとすると、モデルのマネージャーで単純なfilterを実行する必要があります"kansas"で探しているすべてのモデルフィールドで。

URLマッピングが次のようになっている場合:

('(?P<place_name>\w+)$', 'myapp.view.view_index')

その後、あなたはちょうど行うことができるはずです

object_list = Model.objects.filter(place_name = place_name)

uRLのオブジェクトと一致するplace_nameを持つオブジェクトのリストを取得します。そこから、そのリストの各オブジェクトには、他のpythonオブジェクト属性と同じように取得できるid(IDフィールドの名前を変更していない限り)が必要です。

4
Daniel DiPaolo