# -*- coding: utf-8 -*- from django.db import models from django.conf import settings from django.db.models.fields.files import FieldFile from django.db.models.signals import pre_delete from functions.signal_handlers import file_cleanup def get_doc_dir(instance, filename): from pytils import translit return u'import_xls/import/%s' %translit.translify(filename) class LogManager(models.Manager): def create_log(self, work_file, errors): """ :param work_file: executing file :param errors: list of errors ([{'event name':['err1', 'err2']}]) :return: object log """ LOG_DIRECTORY = settings.MEDIA_ROOT+'import_xls/logs/' name= '111.txt' filename = LOG_DIRECTORY + name log_file = open(filename, "w") for error in errors: event_name = ';'.join(error.keys()) errs = '' for err in error.values(): errs += '; '.join(err) errs += ';' log_file.write('%s: %s\n'%(event_name, errs)) log_file.close() #update.log_file.name = 'updates/'+name log = Log(work_file=work_file) log.log.name = 'import_xls/logs/' + name #log = Log.objects.create(work_file=work_file, log=log_file) log.save() return log def create_log_name(self, work_file): log = Log.objects.create(work_file=work_file) LOG_DIRECTORY = settings.MEDIA_ROOT+'import_xls/logs/' name= 'log_%d.log'%log.id filename = LOG_DIRECTORY + name log_file = open(filename, "w").close() log.log.name = 'import_xls/logs/' + name log.save() return log class Log(models.Model): work_file = models.FileField(upload_to=get_doc_dir) log = models.FileField(upload_to='import_xls/logs/', blank=True) type = models.CharField(max_length=10, default='IMPORT') created = models.DateTimeField(auto_now_add=True) objects = models.Manager() custom = LogManager() class Meta: ordering = ['-created'] pre_delete.connect(file_cleanup, sender=Log)