Django: Ошибка при извлечении данных из JSON-поля
Это продолжение следующего вопроса
Django: Получение данных из API с открытым исходным кодом
До сих пор я получал данные о государственных праздниках для Франции, Австралии и Германии из https://date.nager.at/ с помощью документации по адресу https://date.nager.at/swagger/index.html и сохранял их в базе данных JSONField через приложение /fetch_and_save:
fetch_and_save/views.py
import json
import requests
from django.http import HttpResponse
from . import models
def get_public_holidays(request, year, tag):
response = requests.get(f'https://date.nager.at/api/v2/PublicHolidays/{year}/{tag}')
with open(f'public_holidays_{tag}_{year}.json', 'w') as outfile:
json.dump(response.text, outfile)
text_to_add = models.Database(data = response.text)
text_to_add.save()
# debug = models.Database.objects.first().data
return HttpResponse('Please check the virtual environment folder for the public holidays of the assigned country.')
fetch_and_save/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('<int:year>/<str:tag>/', views.get_public_holidays)
]
from django.db import models
class Database(models.Model):
data = models.JSONField()
Итак, если я вызываю `http://127.0.0.1:8005/fetch_and_save/2020/DE, то Django сохраняет в моей базе данных праздники для Германии.
Теперь я пытаюсь заставить другое приложение /retrieve_from_db получать из базы данных праздники страны при указании названия страны в URL.
Скажем, когда я пишу http://127.0.0.1:8005/retrieve_from_db/Australia
, я получаю в веб-приложении все данные, которые я извлек из Австралии, не повторяя годы. Я начал со следующего
/retrieve_from_db/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('Australia/', views.retrieve(tag = 'AU')),
path('France/', views.retrieve(tag = 'FR')),
path('Germany/', views.retrieve(tag = 'DE')),
]
/retrieve_from_db/views.py
import json
import requests
from django.http import HttpResponse
from django.shortcuts import render
from fetch_and_save.models import Database
def retrieve(tag):
return HttpResponse(Database.objects.filter(data__countryCode = tag))
Теперь я получаю ошибку "TypeError: view must be a callable or a list/tuple in the case of include()". Как мне ее получить? Кроме того, как я могу дать неверный ответ на веб-странице, если я вызываю страну, отличную от Франции, Германии и Австралии?