Django Postgresql Error in Production (quiz.models.Question.DoesNotExist:)

Я создаю приложение для викторины, используя руководство. Мое приложение прекрасно работает в разработке с базами данных sqlite3 и postgresql. Но при переносе в продакшн я сталкиваюсь с ошибками при использовании базы данных postgresql. Поэтому я попробовал использовать мою базу данных sqlite3 из разработки в production для проверки. Моя база данных sqlite3 прекрасно работает в production, но postgresql не работает в production. Первоначально я думал, что ошибка на уровне представлений, но теперь я вижу, что ошибка исходит от postgresql. Возможно, это ошибки в моих представлениях или схемах моделей. Я действительно не могу сказать. Соответствующая ошибка, которую я получаю при использовании базы данных postgresql в производстве, используя сервер linux с gunicorn и nginx, находится здесь ниже, а весь дизайн модели и представления также находятся здесь ниже. Спасибо, я ценю ваше время, потраченное на то, чтобы дать мне подходящий ответ на мой вопрос.

models.py

views.py

def save_quiz_view(request, pk, book_pk):
    # if request.user in 
    quiz = Quiz.objects.get(pk=pk)
    # Submition of result only occurs if a user is not in the completed users field. If they are already
    #  in the completed users ManyToMany field, then it won't save. But if not, it will save.
    if request.is_ajax() and not request.user.profile in quiz.completed_users.all():
        questions = []
        data = request.POST
        data_ = dict(data.lists())

        data_.pop('csrfmiddlewaretoken')

        for _k in data_.keys():
            if Question.objects.all():
                # print('key: ', k)
                k = _k
                question = Question.objects.get(text=k)
                questions.append(question)

        user = request.user.profile
        quiz = Quiz.objects.get(pk=pk)

        if request.user.is_authenticated:
            if not user in quiz.completed_users.all():
                quiz.completed_users.add(user)

        score = 0
        multiplier = 100 / quiz.number_of_questions
        results = []
        correct_answer = None

        for q in questions:
            a_selected = request.POST.get(q.text)

            if a_selected != "":
                question_answers = Answer.objects.filter(question=q)
                for a in question_answers:
                    if a_selected == a.text:
                        if a.correct:
                            score += 1
                            correct_answer = a.text
                    else:
                        if a.correct:
                            correct_answer = a.text

                results.append({str(q): {'correct_answer': correct_answer, 'answered': a_selected}})
            else:
                results.append({str(q): 'not answered'})
            
        score_ = score #* multiplier
        Result.objects.create(quiz=quiz, user=user, score=score_)

        if score_:#>= quiz.required_score_to_pass:
            return JsonResponse({'passed': True, 'score': score_, 'results': results})
        else:
            return JsonResponse({'passed': False, 'score': score_, 'results': results})

Ошибка

django@UniqueAsf2:~/src$ python3 manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
October 26, 2021 - 03:57:12
Django version 3.2.8, using settings 'asf.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[26/Oct/2021 03:57:18] "GET /quiz/1/1/ HTTP/1.1" 200 8065
Not Found: /quiz/1/1/assets/vendors/boxicons/css/boxicons.min.css
[26/Oct/2021 03:57:18] "GET /quiz/1/1/assets/vendors/boxicons/css/boxicons.min.css HTTP/1.1" 404 5612
[26/Oct/2021 03:57:18] "GET /quiz/1/1/data/ HTTP/1.1" 200 101
Internal Server Error: /quiz/1/1/save/
Traceback (most recent call last):
  File "/home/django/.local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/django/.local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/django/src/quiz/views.py", line 108, in save_quiz_view
    question = Question.objects.get(text=_k)
  File "/home/django/.local/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/django/.local/lib/python3.9/site-packages/django/db/models/query.py", line 435, in get
    raise self.model.DoesNotExist(
quiz.models.Question.DoesNotExist: Question matching query does not exist.

Ваши данные в Question не хранятся в виде простого текста, потому что вы используете RichTextUploadingField, который преобразует текст в формат HTML для работы с текстовым фоматом. Из-за этого вы не можете напрямую сравнить две строки или выполнить поиск по ним.

Попробуйте использовать icontains для проверки строки в вашем поле. Это может сработать не во всех случаях, поэтому вам придется действовать соответствующим образом.

questions = Question.objects.filter(text__icontains=k)
for question in questions:
    # Handle questions here
Вернуться на верх