2011-01-11 11 views
16

he un modelo básico llamado "Lugares", que tiene este punto de vista:Obtener django ID de objeto basado en el modelo de atributos

def view_index(request, place_name): 

El usuario tendrá acceso a esa vista con una URL como la siguiente:

http://server.com/kansas 

"kansas" es un valor almacenado en un campo llamado "nombre" dentro del modelo "Lugares".

El problema es que no puedo encontrar la forma de obtener el identificador de objeto basado solo en el nombre del objeto. ¿Hay alguna forma de hacer esto?

Respuesta

34

De esta manera:

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

Oh mi ... que soy tonta, cómo podría no entenderlo? Gracias :-) –

3

¿Qué hace su asignación de dirección URL para esa vista parece? Suponiendo que está capturando la parte de su URL con "kansas" y que se establece en el argumento place_name, tendrá que hacer un simple filter en el administrador de su modelo en cualquier campo de modelo que esté buscando "kansas" en.

Si su asignación de dirección URL se parece a:

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

Entonces usted debe ser capaz de hacer precisamente

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

para obtener una lista de objetos que tienen una place_name que coincida con la en la URL A partir de ahí, cada uno de los objetos en esa lista debe tener un id (a menos que haya cambiado el nombre del campo ID) que puede obtener como cualquier otro atributo de objeto python.

3

Como solo quiere id, solo debe consultar id. Un get ingenuo recuperará todos los campos en la fila de la base de datos. Cualquiera de estos métodos solo recuperará los datos que desee.

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

Otro método utiliza only:

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

¿Funcionará de manera más eficiente en comparación con la respuesta aceptada? –

Cuestiones relacionadas