Ich habe mein Projekt endlich auf Produktionsebene veröffentlicht und plötzlich habe ich einige Probleme, mit denen ich mich in der Entwicklungsphase nie befassen musste.
Wenn die Benutzer einige Aktionen veröffentlichen, wird manchmal der folgende Fehler angezeigt.
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
Was mich wirklich frustriert, ist, dass das Projekt in der lokalen Umgebung einwandfrei funktioniert und außerdem das passende Abfrageobjekt in der Datenbank vorhanden ist.
Jetzt vermute ich, dass der Benutzer auf die Datenbank zugreift, wenn sie anderen Benutzern vorbehalten ist, aber es gibt keine Möglichkeit, mein Argument zu beweisen, und ich habe keine Lösung dafür.
Hat jemand diese Art von Problem schon einmal gehabt? Irgendwelche Vorschläge zur Lösung dieses Problems?
Vielen Dank für Ihre Hilfe im Voraus.
BEARBEITEN: Ich habe die Datenbank manuell mit denselben Informationen abgefragt, die aus der Serverfehler-E-Mail stammen, die ich erhalten habe. Ich konnte den Eintrag ohne Probleme treffen. Darüber hinaus scheint genau das gleiche Verhalten, das der Benutzer ausgeführt hat, die meiste Zeit kein Problem aufzuwerfen, sondern eher in einigen (noch unbekannten) Fällen. Zusammenfassend ist es definitiv kein Problem mit dem fehlenden Eintrag in der Datenbank.
quelle
comment = Comment.objects.get(pk=comment_id)
Überprüfen Sie, ob die ID in der Datenbank vorhanden istAntworten:
Ihre Zeile, die den Fehler auslöst, ist hier:
comment = Comment.objects.get(pk=comment_id)
Sie versuchen, auf einen nicht vorhandenen Kommentar zuzugreifen.
from django.shortcuts import get_object_or_404 comment = get_object_or_404(Comment, pk=comment_id)
Anstatt einen Fehler auf Ihrem Server zu haben, erhält Ihr Benutzer eine 404, was bedeutet, dass er versucht, auf eine nicht vorhandene Ressource zuzugreifen.
Ok, bis hierher, ich nehme an, Sie sind sich dessen bewusst.
Einige Benutzer (und ich bin ein Teil von ihnen) lassen Registerkarten lange laufen. Wenn Benutzer zum Löschen von Daten berechtigt sind, kann dies passieren. Ein 404-Fehler ist möglicherweise ein besserer Fehler bei der Behandlung eines gelöschten Ressourcenfehlers als das Senden einer E-Mail an den Administrator.
Andere Benutzer rufen Adressen aus ihrem Verlauf auf (dasselbe gilt, wenn Daten gelöscht wurden, da dies möglicherweise passiert).
quelle
from django.db import connection
,connection.connection.close()
,connection.connection = None
um zu versuchen , DB - Verbindung zurückgesetzt und von einem neuen beginnen.Vielleicht haben Sie keinen Kommentardatensatz mit einem solchen Primärschlüssel, dann sollten Sie diesen Code verwenden:
try: comment = Comment.objects.get(pk=comment_id) except Comment.DoesNotExist: comment = None
quelle
def previous_job(self): return self.get_previous_by_start_dt(brand=self.brand, status='finished') or None
Ich weiß nicht, wie ich den try catch hier implementieren sollSie können dies verwenden:
comment = Comment.objects.filter(pk=comment_id)
quelle
Model.objects.filter
erwähnenswert, dass ein Queryset zurückgegeben wird, währendModel.objects.get
ein Objekt zurückgegeben wird. Wenn das Objekt nicht vorhanden ist, gibt das erstere einen leeren Abfragesatz zurück, das letztere führt zu einemModel.DoesNotExist
Fehler.Comment.objects.filter(pk=comment_id).first()
wird zurückgegeben,None
wenn keine Datensätze gefunden wurden.Sie können dies versuchen. Verwenden Sie einfach eine Funktion, um Ihr Objekt zu erhalten
def get_object(self, id): try: return Comment.objects.get(pk=id) except Comment.DoesNotExist: return False
quelle