- marked as minor
- edited description
Getting blank 'data' results
models.py:
class ServerWinPatchResults(models.Model):
patch_result_id = models.CharField(primary_key=True, max_length=45)
server = models.ForeignKey('Servers', models.Cascade)
patch_guid = models.ForeignKey('WinPatches', models.Cascade, db_column='patch_guid')
downloaded = models.CharField(max_length=5)
installed = models.CharField(max_length=5)
date_installed = models.DateTimeField()
urls.py:
from django.conf.urls import url
from backend.views import ProfileView, JobsView, PatchReportView, PatchReportTable
urlpatterns = [
url(r'^$', ProfileView.as_view(), name='profile'),
url(r'^jobs', JobsView.as_view(), name='jobs'),
url(r'^patchreport', PatchReportView.as_view(), name='patchreport'),
url(r'^prtbl/$', PatchReportTable.as_view(), name='patchreptbl')
]
views.py:
class PatchReportTable(BaseDatatableView):
model = ServerWinPatchResults
def get_initial_queryset(self):
return ServerWinPatchResults.objects.values('server__nodename', 'patch_guid__guid', 'downloaded', 'installed',
'date_installed')
I am getting blank 'data' returns:
{
"recordsFiltered": 178,
"result": "ok",
"recordsTotal": 178,
"draw": 0,
"data": [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[]
]
}
I thought it might be the query itself, but even if I change the initial query set to ServerWinPatchResults.objects.all()
or ServerWinPatchResults.objects.filter(patch_result_id='16013af7d6-ec9f-4def-ae41-007d211f9fbc')
I still get empty results. I have even tried changing the table that is being used to a table without foriegnkeys to see if that is causing the issue to no avail. I see that it is actually reading the query object length since that is the only data being populate so not quite sure what the issue is here.
Comments (6)
-
reporter -
repo owner Seems that you've not defined columns attribute for your PatchReportTable class
-
reporter if I set columns:
class PatchReportTable(BaseDatatableView): model = ServerWinPatchResults columns = ['server__nodename', 'patch_guid__guid', 'downloaded', 'installed', 'date_installed'] def get_initial_queryset(self): return ServerWinPatchResults.objects.values('server__nodename', 'patch_guid__guid', 'downloaded', 'installed', 'date_installed')
It fails with an entirely different error:
{"error": "\nAttributeError\n'dict' object has no attribute 'server__nodename'\n\nDjango Version: 1.10\nPython Executable: /Users/rlthompson/.virtualenvs/venv/bin/python\nPython Version: 3.5.2\nPython Path: ['/Users/rlthompson/PycharmProjects/besoft', '/Users/rlthompson/PycharmProjects/besoft', '/Users/rlthompson/.virtualenvs/venv/lib/python35.zip', '/Users/rlthompson/.virtualenvs/venv/lib/python3.5', '/Users/rlthompson/.virtualenvs/venv/lib/python3.5/plat-darwin', '/Users/rlthompson/.virtualenvs/venv/lib/python3.5/lib-dynload', '/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5', '/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin', '/Users/rlthompson/.virtualenvs/venv/lib/python3.5/site-packages']\nServer time: Wed, 17 Aug 2016 21:49:39 +0000\nInstalled Applications:\n['django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'django.contrib.sites',\n 'allauth',\n 'allauth.account',\n 'allauth.socialaccount',\n 'frontend.apps.FrontendConfig',\n 'backend.apps.BackendConfig',\n 'tastypie']\nInstalled Middleware:\n['django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware']\n\n\nTraceback: \n\nFile \"/Users/rlthompson/.virtualenvs/venv/lib/python3.5/site-packages/django_datatables_view/base_datatable_view.py\" in render_column\n 52. text = getattr(row, column)\n \n \n During handling of the above exception ('dict' object has no attribute 'server__nodename'), another exception occurred:\n \n \n\nFile \"/Users/rlthompson/.virtualenvs/venv/lib/python3.5/site-packages/django_datatables_view/base_datatable_view.py\" in get_context_data\n 215. data = self.prepare_results(qs)\n\nFile \"/Users/rlthompson/.virtualenvs/venv/lib/python3.5/site-packages/django_datatables_view/base_datatable_view.py\" in prepare_results\n 185. data.append([self.render_column(item, column) for column in self.get_columns()])\n\nFile \"/Users/rlthompson/.virtualenvs/venv/lib/python3.5/site-packages/django_datatables_view/base_datatable_view.py\" in <listcomp>\n 185. data.append([self.render_column(item, column) for column in self.get_columns()])\n\nFile \"/Users/rlthompson/.virtualenvs/venv/lib/python3.5/site-packages/django_datatables_view/base_datatable_view.py\" in render_column\n 58. obj = getattr(obj, part)\n\nException Type: AttributeError\nException Value: 'dict' object has no attribute 'server__nodename'\nRequest data not supplied\n\nSettings:\nUsing settings module besoft.settings\nABSOLUTE_URL_OVERRIDES = {}\nACCOUNT_AUTHENTICATION_METHOD = 'email'\nACCOUNT_EMAIL_REQUIRED = True\nACCOUNT_EMAIL_VERIFICATION = 'mandatory'\nACCOUNT_LOGOUT_ON_GET = True\nACCOUNT_LOGOUT_REDIRECT_URL = '/'\nACCOUNT_USERNAME_REQUIRED = False\nADMINS = []\nALLOWED_HOSTS = []\nAPPEND_SLASH = True\nAUTHENTICATION_BACKENDS = \nAUTH_PASSWORD_VALIDATORS = '********************'\nAUTH_USER_MODEL = 'auth.User'\nBASE_DIR = '/Users/rlthompson/PycharmProjects/besoft'\nCACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}\nCACHE_MIDDLEWARE_ALIAS = 'default'\nCACHE_MIDDLEWARE_KEY_PREFIX = '********************'\nCACHE_MIDDLEWARE_SECONDS = 600\nCSRF_COOKIE_AGE = 31449600\nCSRF_COOKIE_DOMAIN = None\nCSRF_COOKIE_HTTPONLY = False\nCSRF_COOKIE_NAME = 'csrftoken'\nCSRF_COOKIE_PATH = '/'\nCSRF_COOKIE_SECURE = False\nCSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'\nCSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'\nCSRF_TRUSTED_ORIGINS = []\nDATABASES = {'salt': {'TEST': {'COLLATION': None, 'NAME': None, 'CHARSET': None, 'MIRROR': None}, 'PASSWORD': '********************', 'HOST': 'localhost', 'TIME_ZONE': None, 'PORT': '3306', 'OPTIONS': {}, 'ENGINE': 'django.db.backends.mysql', 'ATOMIC_REQUESTS': False, 'USER': 'root', 'NAME': 'salt', 'CONN_MAX_AGE': 0, 'AUTOCOMMIT': True}, 'default': {'TEST': {'COLLATION': None, 'NAME': None, 'CHARSET': None, 'MIRROR': None}, 'PASSWORD': '********************', 'HOST': 'localhost', 'TIME_ZONE': None, 'PORT': '3306', 'OPTIONS': {}, 'ENGINE': 'django.db.backends.mysql', 'ATOMIC_REQUESTS': False, 'USER': 'root', 'NAME': 'hive', 'CONN_MAX_AGE': 0, 'AUTOCOMMIT': True}}\nDATABASE_ROUTERS = ['backend.routers.BackendRouter']\nDATA_UPLOAD_MAX_MEMORY_SIZE = 2621440\nDATA_UPLOAD_MAX_NUMBER_FIELDS = 1000\nDATETIME_FORMAT = 'N j, Y, P'\nDATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']\nDATE_FORMAT = 'N j, Y'\nDATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']\nDEBUG = True\nDEBUG_PROPAGATE_EXCEPTIONS = False\nDECIMAL_SEPARATOR = '.'\nDEFAULT_CHARSET = 'utf-8'\nDEFAULT_CONTENT_TYPE = 'text/html'\nDEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'\nDEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'\nDEFAULT_FROM_EMAIL = 'webmaster@localhost'\nDEFAULT_INDEX_TABLESPACE = ''\nDEFAULT_TABLESPACE = ''\nDISALLOWED_USER_AGENTS = []\nEMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'\nEMAIL_HOST = 'localhost'\nEMAIL_HOST_PASSWORD = '********************'\nEMAIL_HOST_USER = ''\nEMAIL_PORT = 25\nEMAIL_SSL_CERTFILE = None\nEMAIL_SSL_KEYFILE = '********************'\nEMAIL_SUBJECT_PREFIX = '[Django] '\nEMAIL_TIMEOUT = None\nEMAIL_USE_SSL = False\nEMAIL_USE_TLS = False\nFILE_CHARSET = 'utf-8'\nFILE_UPLOAD_DIRECTORY_PERMISSIONS = None\nFILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']\nFILE_UPLOAD_MAX_MEMORY_SIZE = 2621440\nFILE_UPLOAD_PERMISSIONS = None\nFILE_UPLOAD_TEMP_DIR = None\nFIRST_DAY_OF_WEEK = 0\nFIXTURE_DIRS = []\nFORCE_SCRIPT_NAME = None\nFORMAT_MODULE_PATH = None\nIGNORABLE_404_URLS = []\nINSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', 'allauth', 'allauth.account', 'allauth.socialaccount', 'frontend.apps.FrontendConfig', 'backend.apps.BackendConfig', 'tastypie']\nINTERNAL_IPS = []\nLANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokm\u00e5l'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]\nLANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']\nLANGUAGE_CODE = 'en-us'\nLANGUAGE_COOKIE_AGE = None\nLANGUAGE_COOKIE_DOMAIN = None\nLANGUAGE_COOKIE_NAME = 'django_language'\nLANGUAGE_COOKIE_PATH = '/'\nLOCALE_PATHS = []\nLOGGING = {}\nLOGGING_CONFIG = 'logging.config.dictConfig'\nLOGIN_REDIRECT_URL = '/accounts/profile/'\nLOGIN_URL = '/accounts/login/'\nLOGOUT_REDIRECT_URL = None\nMANAGERS = []\nMEDIA_ROOT = ''\nMEDIA_URL = ''\nMESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'\nMIDDLEWARE = ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']\nMIDDLEWARE_CLASSES = ['django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware']\nMIGRATION_MODULES = {}\nMONTH_DAY_FORMAT = 'F j'\nNUMBER_GROUPING = 0\nPASSWORD_HASHERS = '********************'\nPASSWORD_RESET_TIMEOUT_DAYS = '********************'\nPREPEND_WWW = False\nROOT_URLCONF = 'besoft.urls'\nSECRET_KEY = '********************'\nSECURE_BROWSER_XSS_FILTER = False\nSECURE_CONTENT_TYPE_NOSNIFF = False\nSECURE_HSTS_INCLUDE_SUBDOMAINS = False\nSECURE_HSTS_SECONDS = 0\nSECURE_PROXY_SSL_HEADER = None\nSECURE_REDIRECT_EXEMPT = []\nSECURE_SSL_HOST = None\nSECURE_SSL_REDIRECT = False\nSERVER_EMAIL = 'root@localhost'\nSESSION_CACHE_ALIAS = 'default'\nSESSION_COOKIE_AGE = 1209600\nSESSION_COOKIE_DOMAIN = None\nSESSION_COOKIE_HTTPONLY = True\nSESSION_COOKIE_NAME = 'sessionid'\nSESSION_COOKIE_PATH = '/'\nSESSION_COOKIE_SECURE = False\nSESSION_ENGINE = 'django.contrib.sessions.backends.db'\nSESSION_EXPIRE_AT_BROWSER_CLOSE = False\nSESSION_FILE_PATH = None\nSESSION_SAVE_EVERY_REQUEST = False\nSESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'\nSETTINGS_MODULE = 'besoft.settings'\nSHORT_DATETIME_FORMAT = 'm/d/Y P'\nSHORT_DATE_FORMAT = 'm/d/Y'\nSIGNING_BACKEND = 'django.core.signing.TimestampSigner'\nSILENCED_SYSTEM_CHECKS = []\nSITE_ID = 1\nSTATICFILES_DIRS = ['/Users/rlthompson/PycharmProjects/besoft/static']\nSTATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']\nSTATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'\nSTATIC_ROOT = None\nSTATIC_URL = '/static/'\nTASTYPIE_DEFAULT_FORMATS = ['json']\nTEMPLATES = [{'DIRS': ['/Users/rlthompson/PycharmProjects/besoft/templates'], 'OPTIONS': {'context_processors': ['django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.request']}, 'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates'}]\nTEST_NON_SERIALIZED_APPS = []\nTEST_RUNNER = 'django.test.runner.DiscoverRunner'\nTHOUSAND_SEPARATOR = ','\nTIME_FORMAT = 'P'\nTIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']\nTIME_ZONE = 'UTC'\nUSE_ETAGS = False\nUSE_I18N = True\nUSE_L10N = True\nUSE_THOUSAND_SEPARATOR = False\nUSE_TZ = True\nUSE_X_FORWARDED_HOST = False\nUSE_X_FORWARDED_PORT = False\nWSGI_APPLICATION = 'besoft.wsgi.application'\nX_FRAME_OPTIONS = 'SAMEORIGIN'\nYEAR_MONTH_FORMAT = 'F Y'\n\n\nYou're seeing this error because you have DEBUG = True in your\nDjango settings file. Change that to False, and Django will\ndisplay a standard page generated by the handler for this status code.\n\n", "recordsFiltered": 0, "recordsTotal": 0, "data": [], "draw": 0, "result": "ok"}
-
repo owner Try ServerWinPatchResults.objects.all() instead of values(...)
You might also want to override prepare_results method with your own one, so that it doesn't even use render_column that is just for convenience (see at the end of README.md: https://bitbucket.org/pigletto/django-datatables-view/src/62dccc63b99c85cdbc83b7ab09b18a6c1ece8b25/README.md?fileviewer=file-view-default)
-
reporter Great suggestion. I also was calling the relation incorrectly as well. Here is what I did to fix it:
class PatchReportTable(BaseDatatableView): model = ServerWinPatchResults columns = ['server.nodename', 'patch_guid.guid', 'downloaded', 'installed', 'date_installed'] order_columns = ['server.nodename', 'patch_guid.guid', 'downloaded', 'installed', 'date_installed'] def get_initial_queryset(self): return ServerWinPatchResults.objects.all()
-
reporter - changed status to closed
resolved my own issue, with the help of Maciej
- Log in to comment