2012-03-05 11 views
20

Quiero comprobar para ver si la fila en la base de datos ya contiene una entrada particular. Si ya existe, evite que se agregue nuevamente, de lo contrario, agréguelo de forma normal.¿Cómo verificar si existe algo en una base de datos postgresql usando django?

¿Cómo puedo preguntar a la base de datos si existe algo sin sacar todo el contenido de la base de datos para verificar?

+0

duplicado posible de [¿cuál es la manera correcta para validar si existe un objeto en una vista de Django sin devolver 404? ] (http://stackoverflow.com/questions/639836/what-is-the-right-way-to-validate-if-an-object-exists-in-a-django-view-without-r) – Wtower

Respuesta

44

Puede utilizar

Entry.objects.filter(name='name', title='title').exists() 

Esto se volverá a vosotros los valores verdadero/falso. Cuando usas count el orm genera una consulta que se ejecutará mucho más tiempo que en el método exists. El método get generará una excepción cuando el objeto no existe.

request.POST es un diccionario para comprobar db con él utiliza, es decir:

Entry.objects.filter(name=request.POST['name'], title=request.POST['title']).exists() 
+0

gracias. eso ayudó mucho. –

+0

Puede cambiar la cadena del diccionario a unicode: es decir, unicode ('cadena') o u'string ' – szaman

+0

¿Podría ayudarme a dar una alerta (mediante javascript o cualquiera), si la instancia ya existe? – suhailvs

2

La respuesta a su pregunta es "Sí". Sin embargo, creo que también debería investigar una alternativa para consultar la base de datos; crea una clave única en el conjunto de campos para los que no quieres que existan duplicados.

Ahora, para responder a su pregunta. Echa un vistazo a la documentación de Django para hacer una consulta:

https://docs.djangoproject.com/en/dev/topics/db/queries/

En pocas palabras, si usted tiene un modelo de datos para una cosa, Thing.objects es la interfaz para acceder a las consultas. a partir de los documentos (con entrada de blog, que tiene un campo de cadena "titular" como ejemplo):

Entry.objects.get(headline__exact="Man bites dog") 

todas las capacidades de la interfaz son lo que se puede esperar de una base de datos (hay un amplio conjunto de comparaciones a datos que no sean coincidencias exactas). Sugeriría buscar más en la documentación de su problema específico.

+0

Sí En este caso, Entry es la clase para el modelo. Los valores proporcionados por el usuario salen a través de request.POST ['cashcode'], no solo request.POST. La búsqueda del diccionario es importante. – ccoakley

Cuestiones relacionadas