question as csv
This commit is contained in:
@@ -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<br />'))
|
||||
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<br />'))
|
||||
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):
|
||||
|
||||
Reference in New Issue
Block a user