Получение значения json-поля в sqlite-модели из представления django
Я пытаюсь получить значение из correct_answer
ключа в JSON-поле внутри модели, которое ранее было получено из внешнего API. Это значение используется в условии для перенаправления (правильный ответ) или отображения нового вопроса (неправильный ответ).
Когда я попытался получить доступ к значению в виде словаря из подражаемой версии модели, мой тест выдал ошибку 'DefferedAttribute' object is not subscriptable
. Можно было бы сказать, что данные не извлекаются из внешнего API, но я проверил, что имитированная модель работает.
Вот мой код:
from django.shortcuts import redirect, render, HttpResponse
from django.template import loader
from .forms import QuestionForm, QuestionLevelForm
from urllib.request import urlopen, URLError
from .models import Log
def process_question(request):
form={};
if 'level' in request.POST:
url = 'http://opentb.com/api.php?amount=1&category=9&difficulty='+request.POST['level']+'&type="multiple"'
try:
response = urlopen(url)
except URLError as e:
if hasattr(e, 'reason'):
HttpResponse('Reaching server failed: ', e.reason)
elif hasattr(e, 'code'):
HttpResponse('Couldn\'t fufill request', e.code)
else:
question = response["results"][0]
form = QuestionForm(question)
Log.question = question #How to test this works?
Log.save(update_fields=['question'])
return render(request, "log/question.html", {"question": question, "form": form})
elif 'answer' in request.POST:
if request.POST["correct_answer"] == Log.question['correct_answer']: #This is the conditional I need
return redirect('/log/reward')
else:
notification = "Wrong answer"
level = QuestionLevelForm
return render(request, "log/question.html", {"form": level, "notification": notification})
else:
form = QuestionLevelForm();
return render(request, "log/question.html", {"form": form})
Вот моя модель:
from django.db import models
class Log(models.Model):
recipe_ingredients = models.JSONField(null=True)
recipe_area = models.JSONField(null=True)
recipe_categories = models.JSONField(null=True)
activities = models.JSONField(null=True)
question = models.JSONField(default=dict)
class Meta:
abstract = True
def save(self, *args, **kwargs):
self.__class__.objects.exclude(id=self.id).delete()
super(Log, self).save(*args, **kwargs)
@classmethod
def load(cls):
try:
return cls.objects.get()
except cls.DoesNotExist:
return cls()
После нескольких попыток запросить поле я нашел этот вопрос Stackoverflow, который имел для меня больше смысла. Однако в данном случае он не сработал.
Может ли кто-нибудь указать, что я упускаю или делаю неправильно?