diff --git a/content/models.py b/content/models.py
index 1edad1d..5eade18 100644
--- a/content/models.py
+++ b/content/models.py
@@ -1,5 +1,5 @@
+import csv
import json
-import logging
import os
from colorfield.fields import ColorField
@@ -12,6 +12,7 @@ from filer.fields.file import FilerFileField
from lib.core.db.models.base import SharedPermissionBase
from lib.core.db.models.mixins import DateAware, AuthorAware, DescriptionAware, NameAware, PublishedAware
+from tablequizwiki.settings import BASE_DIR
class MediaFile(NameAware, DateAware, AuthorAware, DescriptionAware):
@@ -88,37 +89,59 @@ class Question(DateAware, AuthorAware, PublishedAware, DescriptionAware):
| models.Q(buzzword__icontains=term) \
| models.Q(labels__name__icontains=term)
-
@staticmethod
def get_by_tearchterm(term, queryset=None):
if not queryset:
queryset = Question.objects
return queryset.filter(Question.searchdomain(term)).annotate(cnt=models.Count('id'))
+ def to_view(self, for_players: bool = False):
+ ret = {}
+ ret['name'] = '{}{}'.format(self.name, f'({self.buzzword})' if self.buzzword else '')
+ ret['question'] = self.question
+ if self.description:
+ ret['question'] += ' \n\n------------------------------\n\n' + self.description
+ ret['awnser'] = self.awnser
+ ret['level'] = self.level.value
+ ret['medias'] = []
+ ret['links'] = []
+ for media in self.medias.all():
+ ret.setdefault('medias', []).append(os.path.basename(media.file.path))
+ for link in self.links.all():
+ ret.setdefault('links', []).append(link.url)
+ ret['question'] = mark_safe(ret['question'].replace('\n', '\n
'))
+ return ret
-def to_view(self, for_players: bool = False):
- ret = {}
- ret['name'] = '{}{}'.format(self.name, f'({self.buzzword})' if self.buzzword else '')
- ret['question'] = self.question
- if self.description:
- ret['question'] += ' \n\n------------------------------\n\n' + self.description
- ret['awnser'] = self.awnser
- ret['level'] = self.level.value
- ret['medias'] = []
- ret['links'] = []
- for media in self.medias.all():
- ret.setdefault('medias', []).append(os.path.basename(media.file.path))
- for link in self.links.all():
- ret.setdefault('links', []).append(link.url)
- ret['question'] = mark_safe(ret['question'].replace('\n', '\n
'))
- logging.error(ret)
- return ret
+ @property
+ def zippath(self):
+ return str(BASE_DIR) + f'/filestore/zip/question.{self.id}.zip'
+ @property
+ def pdfpath(self):
+ return str(BASE_DIR) + f'/filestore/pdf/question.{self.id}.pdf'
-def default_json(o):
- if isinstance(o, (MediaFile,)):
- return str(o)
- return json.dumps(model_to_dict(o))
+ @property
+ def csvpath(self):
+ return str(BASE_DIR) + f'/filestore/csv/question.{self.id}.csv'
+
+ def default_json(o):
+ if isinstance(o, (MediaFile,)):
+ return str(o)
+ return json.dumps(model_to_dict(o))
+
+ def to_csv(self, fh=None):
+ if fh:
+ cf = fh
+ else:
+ cf = open(self.csvpath, 'w')
+ items = self.to_view()
+ keys = items.keys()
+ dw = csv.DictWriter(cf, fieldnames=list(keys))
+ dw.writeheader()
+ dw.writerow(items)
+ if not fh:
+ cf.close()
+ return cf if fh else self.csvpath
class QuestionVersion(DateAware, AuthorAware):
diff --git a/content/templates/questions.html b/content/templates/questions.html
index 752325a..612cbeb 100644
--- a/content/templates/questions.html
+++ b/content/templates/questions.html
@@ -1,5 +1,6 @@
{% extends 'base.html' %}
{% block content %}
+