J'ai un modèle de base nommé "Places" qui a cette vue:
def view_index(request, place_name):
L'utilisateur accédera à cette vue avec une URL comme celle-ci:
http://server.com/kansas
"kansas" est une valeur stockée dans un champ nommé "nom" à l'intérieur du modèle "Places".
Le problème est que je ne peux pas comprendre comment obtenir l'ID d'objet en se basant uniquement sur le nom de l'objet. Y a-t-il un moyen de faire cela?
Comme ça:
place = Places.objects.get(name='kansas')
print place.id
Comme vous ne voulez que id
, vous ne devez rechercher que id
. Un get
naïf récupérera tous les champs de la ligne de la base de données. L'une ou l'autre de ces méthodes ne récupérera que les données souhaitées.
id = Place.objects.filter(name='kansas').values('id')[0]['id']
Ou avec values_list:
id = Place.objects.filter(name='kansas').values_list('id', flat=True).first()
Une autre méthode utilise only
:
id = Place.objects.only('id').get(name='kansas').id
À quoi ressemble le mappage d'URL pour cette vue? En supposant que vous capturez la partie de votre URL avec "kansas"
dedans et qui est réglé sur place_name
argument, vous devrez faire un simple filter
sur le gestionnaire de votre modèle sur le champ de modèle que vous recherchez "kansas"
dans.
Si votre mappage d'URL ressemble à:
('(?P<place_name>\w+)$', 'myapp.view.view_index')
Alors vous devriez pouvoir faire juste
object_list = Model.objects.filter(place_name = place_name)
pour obtenir une liste des objets qui ont un place_name
qui correspond à celui de l'URL. À partir de là, chacun des objets de cette liste doit avoir un id
(sauf si vous avez renommé le champ ID) que vous pouvez utiliser comme n'importe quel autre attribut d'objet python.