database - Error de Django: la consulta de coincidencia no existe
django model operations (4)
Puedes intentarlo de esta manera. solo usa una función para obtener tu objeto
def get_object(self, id):
try:
return Comment.objects.get(pk=id)
except Comment.DoesNotExist:
return False
Finalmente lancé mi proyecto al nivel de producción y de repente tuve algunos problemas que nunca tuve que enfrentar en la fase de desarrollo.
Cuando los usuarios publican algunas acciones, a veces obtengo el siguiente error.
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "home/ubuntu/server/opineer/comments/views.py", line 103, in comment_expand
comment = Comment.objects.get(pk=comment_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 131, in get
return self.get_query_set().get(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 366, in get
% self.model._meta.object_name)
DoesNotExist: Comment matching query does not exist
Lo que realmente me frustra es que el proyecto funciona bien en el entorno local y, además, el objeto de consulta coincidente EXISTE en la base de datos.
Ahora sospecho que el usuario está accediendo a la base de datos cuando está reservada para otros usuarios, pero no hay forma de probar mi argumento ni tengo ninguna solución para él.
¿Alguien tuvo este tipo de problema antes? ¿Alguna sugerencia sobre cómo resolver este problema?
Muchas gracias por adelantado por su ayuda.
EDIT: he consultado manualmente la base de datos utilizando la misma información obtenida del correo electrónico de error del servidor que recibí. Pude golpear la entrada sin ningún problema. Además, parece que el mismo comportamiento que el usuario realizó no plantea ningún problema la mayor parte del tiempo, sino más bien en algunos casos (que todavía no se conoce). En conclusión, definitivamente no es un problema con la entrada faltante en la base de datos.
Puedes usar esto:
comment = Comment.objects.filter(pk=comment_id)
Tal vez no tenga ningún registro de Comentarios con esa clave principal, entonces debe usar este código:
try:
comment = Comment.objects.get(pk=comment_id)
except Comment.DoesNotExist:
comment = None
su línea que plantea el error está aquí:
comment = Comment.objects.get(pk=comment_id)
intenta acceder a un comentario no existente.
from django.shortcuts import get_object_or_404
comment = get_object_or_404(Comment, pk=comment_id)
En lugar de tener un error en su servidor, su usuario obtendrá un 404 que significa que intenta acceder a un recurso no existente.
Ok hasta aquí, supongo que eres consciente de esto.
Algunos usuarios (y yo soy parte de ellos) permiten que las pestañas funcionen durante mucho tiempo. Si los usuarios están autorizados a eliminar datos, puede suceder. Un error 404 puede ser un mejor error para manejar un error de recurso eliminado que enviar un correo electrónico al administrador.
Otros usuarios van a las direcciones de su historial (lo mismo si los datos se han eliminado ya que pueden suceder).