このビューを持つ「Places」という名前の基本モデルがあります。
def view_index(request, place_name):
ユーザーは、次のようなURLでそのビューにアクセスします。
http://server.com/kansas
「kansas」は、モデル「Places」内の「name」という名前のフィールドに格納されている値です。
問題は、オブジェクト名だけに基づいてオブジェクトIDを取得する方法がわからないことです。これを行う方法はありますか?
このような:
place = Places.objects.get(name='kansas')
print place.id
必要なのは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
そのビューの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フィールドの名前を変更していない限り)が必要です。