it-swarm.asia

خطأ Django - استعلام المطابقة غير موجود

لقد أخرجت مشروعي أخيرًا إلى مستوى الإنتاج وفجأة لدي بعض المشكلات التي لم أواجهها مطلقًا في مرحلة التطوير.

عندما ينشر المستخدمون بعض الإجراءات ، تظهر لي في بعض الأحيان الخطأ التالي.

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

ما يحبطني حقًا هو أن المشروع يعمل بشكل جيد في البيئة المحلية ، علاوة على ذلك ، يوجد كائن استعلام مطابق في قاعدة البيانات.

الآن أشك في أن المستخدم يصل إلى قاعدة البيانات عندما يكون محجوزًا للمستخدمين الآخرين ، ولكن لا توجد طريقة لإثبات حجتي ولا لدي أي حل لها.

هل أي شخص لديه هذا النوع من القضية من قبل؟ أي اقتراحات حول كيفية حل هذه المشكلة؟

شكرا جزيلا لمساعدتكم مقدما لك.

تحرير: لقد قمت بالاستعلام يدويًا عن قاعدة البيانات باستخدام نفس المعلومات التي تم استردادها من البريد الإلكتروني الخاص بخاطئ الخادم الذي تلقيته. كنت قادرا على ضرب الإدخال دون أي مشكلة. علاوة على ذلك ، يبدو أن السلوك نفسه الذي قام به المستخدم لا يثير أي مشكلة في معظم الوقت ، بل في بعض الحالات (التي لم تكن معروفة بعد). في الختام ، إنها بالتأكيد ليست مشكلة في الإدخال المفقود في قاعدة البيانات.

57
Chris P

خطك يثير الخطأ هنا:

comment = Comment.objects.get(pk=comment_id)

تحاول الوصول إلى تعليق غير موجود.

from Django.shortcuts import get_object_or_404

comment = get_object_or_404(Comment, pk=comment_id)

بدلاً من وجود خطأ في الخادم الخاص بك ، سيحصل المستخدم الخاص بك على 404 بمعنى أنه يحاول الوصول إلى مورد غير موجود.

حسناً إلى هنا أفترض أنك على دراية بهذا.

يسمح بعض المستخدمين (وأنا جزء منهم) بتشغيل علامات التبويب لفترة طويلة ، إذا كان المستخدمون مصرح لهم بحذف البيانات ، فقد يحدث ذلك. قد يكون خطأ 404 خطأ أفضل في معالجة خطأ مورد محذوف من إرسال بريد إلكتروني إلى المسؤول.

يذهب المستخدمون الآخرون إلى عناوين من سجلهم ، (نفس الشيء إذا تم حذف البيانات منذ حدوثها).

59
christophe31

ربما ليس لديك سجل تعليقات مع هذا المفتاح الأساسي ، ثم يجب عليك استخدام هذا الرمز:

try:
    comment = Comment.objects.get(pk=comment_id)
except Comment.DoesNotExist:
    comment = None
68
Dracontis

يمكنك استخدام هذا:

comment = Comment.objects.filter(pk=comment_id)
15
Klang Wutcharin

قد تحاول بهذه الطريقة. مجرد استخدام وظيفة للحصول على وجوه الخاص بك

def get_object(self, id):
    try:
        return Comment.objects.get(pk=id)
    except Comment.DoesNotExist:
        return False
4
Mehedi Hasan