2011-01-11 6 views
16

ho un modello di base denominata "Luoghi" che ha questo punto di vista:Get Django oggetto id basata sul modello attributo

def view_index(request, place_name): 

L'utente accederà quella vista con un URL come questo:

http://server.com/kansas 

"kansas" è un valore memorizzato in un campo chiamato "nome" all'interno del modello "Luoghi".

Il problema è che non riesco a capire come ottenere l'ID oggetto basato solo sul nome dell'oggetto. C'è un modo per fare questo?

risposta

34

Ti piace questa:

place = Places.objects.get(name='kansas') 
print place.id 
+1

Oh mio ... io sono stupido, come potrei non capirlo? Grazie :-) –

3

cosa fa il tuo URL mapping per quella vista assomiglia? Supponendo che tu stia catturando la parte del tuo URL con "kansas" e che sia impostata sull'argomento place_name, dovrai eseguire un semplice filter sul gestore del tuo modello su qualsiasi campo del modello che stai cercando. "kansas" pollici.

Se la mappatura URL assomiglia:

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

Poi si dovrebbe essere in grado di fare proprio

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

per ottenere un elenco di oggetti che hanno una place_name che corrisponde a quello nell'URL. Da lì, ciascuno degli oggetti in tale elenco dovrebbe avere un id (a meno che non si sia rinominato il campo ID) che si può ottenere come qualsiasi altro attributo dell'oggetto python.

3

Poiché si desidera solo id, è necessario eseguire una query solo per id. Un ingenuo get recupererà tutti i campi sulla riga del database. Uno di questi metodi recupererà solo i dati che desideri.

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

Un altro metodo utilizza only:

id = Place.objects.only('id').get(name='kansas').id 
+0

Questo si comporterà in modo più efficiente rispetto alla risposta accettata? –