Example #1
0
 def __getitem__(self, item):
     #if item in self._cache:        return self._cache[item]
     op = threadlocals.get_current_user()
     if op and op.is_anonymous(): op = None
     if '.' not in item:
         value = getattr(settings, item)
     else:
         items = item.split(".", 1)
         value = None
         try:
             opt = Option.objects.get(app_label=items[0], name=items[1])
         except ObjectDoesNotExist:
             return None
         try:
             if op:
                 opt = PersonalOption.objects.get(option=opt, user=op)
                 value = opt.value
         except ObjectDoesNotExist:
             pass
         if value == None:
             try:
                 opt = SystemOption.objects.get(option=opt)
                 value = opt.value
             except ObjectDoesNotExist:
                 value = opt.default
         self._cache[item] = value
     return value
Example #2
0
 def __setitem__(self, item, value):
     """
             修改一个系统配置项的值到用户个性化设置中,这主要用于系统运行期保存一些个性化的参数设置。
             """
     if self.__getitem__(item) == value: return
     if item in self._cache: self._cache.pop(item)
     op = threadlocals.get_current_user()
     if op and op.is_anonymous(): op = None
     items = item.split(".", 1)
     opt = Option.objects.get(app_label=items[0], name=items[1])
     try:
         p_opt = PersonalOption.objects.get(option=opt, user=op)
     except ObjectDoesNotExist:
         p_opt = PersonalOption(option=opt,
                                user=op)  #create it if not exists
     if not (p_opt.value == value):
         p_opt.value = value
         p_opt.save()
         if item == 'base.language':
             from django.utils.translation import check_for_language, activate, get_language
             request = threadlocals.get_current_request()
             if request:
                 lang_code = value
                 if lang_code and check_for_language(lang_code):
                     if hasattr(request, 'session'):
                         request.session['django_language'] = lang_code
                         activate(lang_code)
                         request.LANGUAGE_CODE = get_language()
     self._cache[item] = value
Example #3
0
 def __getitem__(self, item):
         #if item in self._cache:        return self._cache[item]
         op = threadlocals.get_current_user()
         if op and op.is_anonymous(): op = None
         if '.' not in item:
                 value = getattr(settings, item)
         else:
                 items = item.split(".", 1)
                 value = None
                 try:
                         opt = Option.objects.get(app_label=items[0], name=items[1])
                 except ObjectDoesNotExist:
                         return None
                 try:
                         if op:
                                 opt = PersonalOption.objects.get(option=opt, user=op)
                                 value = opt.value
                 except ObjectDoesNotExist: pass
                 if value == None:
                         try:
                                 opt = SystemOption.objects.get(option=opt)
                                 value = opt.value
                         except ObjectDoesNotExist:
                                 value = opt.default
                 self._cache[item] = value
         return value
Example #4
0
 def __setitem__(self, item, value):
         """
         修改一个系统配置项的值到用户个性化设置中,这主要用于系统运行期保存一些个性化的参数设置。
         """
         if self.__getitem__(item) == value: return
         if item in self._cache: self._cache.pop(item)
         op = threadlocals.get_current_user()
         if op and op.is_anonymous(): op = None
         items = item.split(".", 1)
         opt = Option.objects.get(app_label=items[0], name=items[1])
         try:
                 p_opt = PersonalOption.objects.get(option=opt, user=op)
         except ObjectDoesNotExist:
                 p_opt = PersonalOption(option=opt, user=op) #create it if not exists
         if not (p_opt.value == value):
                 p_opt.value = value
                 p_opt.save()
                 if item == 'base.language':
                         from django.utils.translation import check_for_language, activate, get_language
                         request = threadlocals.get_current_request()
                         if request:
                                 lang_code = value
                                 if lang_code and check_for_language(lang_code):
                                         if hasattr(request, 'session'):
                                                 request.session['django_language'] = lang_code
                                                 activate(lang_code)
                                                 request.LANGUAGE_CODE = get_language()
         self._cache[item] = value
Example #5
0
    def save(self):
        from middleware import threadlocals

        if not self.id:
            self.created_by = threadlocals.get_current_user()

        self.updated_on = datetime.now()
        super(Blog, self).save()
Example #6
0
    def save(self):
        from middleware import threadlocals

        if not self.id:
            self.created_by = threadlocals.get_current_user()

        self.updated_on = datetime.now()
        super(Content, self).save()
Example #7
0
    def delete(self):
        if self.Admin.cache:  # 是否缓存
            key = cache_key(self, self.pk)
            cache.set(key, None)
            cache.delete(key)

        if self.Admin.log:  # 是否做日志记录
            from models_logentry import LogEntry, DELETION
            op = threadlocals.get_current_user()
            if op and op.is_anonymous(): op = None
            LogEntry.objects.log_action(
                user_id=op and op.pk or None,
                content_type_id=ContentType.objects.get_for_model(self).pk,
                object_id=self.pk,
                object_repr=force_unicode(self),
                action_flag=DELETION)
        super(CachingModel, self).delete()
Example #8
0
    def save(self):
        #print 'user ='******'user_id', None) is None:
            self.user_id = threadlocals.get_current_user().id

        # disregard any modifications to ip address
        self.ip = threadlocals.get_current_ip()
        # self.ip = '127.0.0.1'

        if self.previous is not None:
            self.odate = self.previous.odate
        elif not self.id:
            # only do the following on creation, not modification
            self.odate = datetime.now()
        super(Post, self).save()
Example #9
0
def update_record(sender, instance, created, **kwargs):
    registered = []
    for app, mdl in AUDITED_MODELS:
        registered.append(django.db.models.get_model(app, mdl))
    if sender in registered:
        userid = None
        ut = None
        details = ''
        requestuser = threadlocals.get_current_user()
        if isinstance(instance, User):
            user = instance
        else:
            try:
                user = instance.user
            except:
                user = None
        if requestuser != None:
            userid = requestuser.id
        details += 'model %s;' % sender.__name__
        if created == True:
            ut = UpdateType.objects.get(name = "joined")
            details += "new;"
        else:
            details += "edited;"
        if ut == None:
            ut = UpdateType.objects.get(name = "update")
        try:
            state = pickle.dumps(instance, protocol=0)
        except:
            state = None
        url = threadlocals.get_url()
        result = isinstance(user, AnonymousUser)
        if result:
            user = None
            details += "AnonymousUser, new account or a login.;"
        log = Log.objects.create(
            user = user, 
            update_type = ut,
            by_user_id = userid,
            url = url,
            details = details,
            state = state
            )
Example #10
0
    def delete(self):
        if self.Admin.cache:  # 是否缓存
            key = cache_key(self, self.pk)
            cache.set(key, None)
            cache.delete(key)

        if self.Admin.log:  # 是否做日志记录
            from models_logentry import LogEntry, DELETION

            op = threadlocals.get_current_user()
            if op and op.is_anonymous():
                op = None
            LogEntry.objects.log_action(
                user_id=op and op.pk or None,
                content_type_id=ContentType.objects.get_for_model(self).pk,
                object_id=self.pk,
                object_repr=force_unicode(self),
                action_flag=DELETION,
            )
        super(CachingModel, self).delete()
Example #11
0
def get_all_app_and_models(hide_visible_false=True):
    '''
    获取系统所有界面可视模型信息
    条件:
            对象类型:Model (_meta.app_label存在)   AppOperation (含 view 成员)
                             非 _meta.abstract
                             有 browse_model 权限            有 browse_model 权限
           配置项: verbose_name、visible、menu_index、app_menu、parent_model、select_related_perms、hide_perms、cancel_perms、menu_group
                         verbose_name、visible、_menu_index、_app_menu、_parent_model、_select_related_perms、_hide_perms、_cancel_perms、add_model_permission
    '''
    from django.conf import settings
    from base.translation import DataTranslation, _ugettext_ as _
    from django.db.models.loading import get_app
    from django.db import models
    from django.core.urlresolvers import reverse
    from django.core.cache import cache
    from middleware import threadlocals    
    usr=threadlocals.get_current_user()
    cache_key = "%s_%s"%(usr.username,"menu_list")  # 当前用户菜单列表缓存名
    if usr.is_anonymous():
        cache.delete(cache_key)
    menu_list= None#cache.get(cache_key)    # 不使用缓存
    if menu_list:
        return menu_list
    ################# 创建开始 ####################
    apps={}
    for application in settings.INSTALLED_APPS: # 首要条件必须在安装的app中
        if application in settings.INVISIBLE_APPS: continue # 去掉隐藏的app
        app_label=application.split(".")[-1]
        apps[app_label]={
            'models':[],
            'is_app_true':'true'
            }
    for app_label in apps.keys():
        app=get_app(app_label)  # django 关键 api 的使用
        apps[app_label]['name']=u"%(name)s"%{'name':hasattr(app, "verbose_name") and app.verbose_name or unicode(DataTranslation.get_field_display(ContentType, 'app_label', app_label))}
        apps[app_label]['index']=hasattr(app, '_menu_index') and app._menu_index or 9999
        for i in dir(app):  # 条件二:在app.models 中的对象 如app/models/__init__.py
            app_menu=None
            try:
                model=app.__getattribute__(i)   # 得到成员对象
                m0={}
                ##################### model 对象 #####################
                if issubclass(model, models.Model) and (model._meta.app_label==app_label):  # 条件三:成员为model,app_label不为空
                    admin=hasattr(model, "Admin") and model.Admin or None
                    if not model._meta.abstract:
                        perm='%s.%s_%s'%(model._meta.app_label, "browse",model.__name__.lower())
                        if usr.has_perm(perm):
                            m0={'verbose_name': u"%(name)s"%{'name':model._meta.verbose_name},'model':model, 'index':9999}
                            if (not admin or not hasattr(admin, "visible") or admin.visible):
                                m0["visible"]=True
                            else:
                                m0["visible"]=False
                            if hasattr(admin, "menu_index"):
                                m0['index']=admin.menu_index
                            
                            if hasattr(admin, "parent_model"):
                                m0["parent_model"]=admin.parent_model
                            if hasattr(admin,"select_related_perms"):
                                m0["select_related_perms"]=admin.select_related_perms
                            if hasattr(admin,"hide_perms"):
                                m0["hide_perms"]=admin.hide_perms
                            if hasattr(admin,"cancel_perms"):
                                m0["cancel_perms"]=admin.cancel_perms
                            app_menu=app_label
                            if hasattr(admin, "app_menu"):
                                app_menu=admin.app_menu
                            
                            m0['menu_group'] = hasattr(admin, "menu_group") and admin.menu_group or app_label#未配置时取app_menu(即app_label)
                ##################### AppOperation 对象 #####################            
                elif issubclass(model, AppOperation) and hasattr(model, 'view'):    # 含view成员的 AppOperation
                    operation_flag=hasattr(model,'operation_flag') and model.operation_flag or "true"
                    menu_group = hasattr(model, '_menu_group') and model._menu_group or app_label#未配置时取app_menu(即app_label)
                    if usr.has_perm("contenttypes.can_%s"%model.__name__):
                        m0={'verbose_name':u"%(name)s"%{'name': hasattr(model, "verbose_name") and model.verbose_name or (u"%s"%_(model.__name__))},
                            'model':None,
                            'operation': model,
                            'menu_group': menu_group,
                            'operation_flag':operation_flag,
#                            'url': reverse(model.view.im_func),
                            'index': 9999}
                        if (not hasattr(model, 'visible') or getattr(model,'visible')):
                            m0["visible"]=True
                        else:
                            m0["visible"]=False
                        if hasattr(model, 'add_model_permission'):
                            m0["add_model_permission"]=model.add_model_permission
                        if hasattr(model, '_parent_model'):
                            m0["parent_model"]=model._parent_model
                        if hasattr(model, "_menu_index"):
                            m0['index']=model._menu_index
                        if hasattr(model,"_select_related_perms"):
                            m0["select_related_perms"]=model._select_related_perms
                        if hasattr(model,"_hide_perms"):
                            m0["hide_perms"]=model._hide_perms
                        if hasattr(model,"_cancel_perms"):
                            m0["cancel_perms"]=model._cancel_perms                            
                        app_menu=app_label
                        if hasattr(model, "_app_menu"):
                            app_menu=model._app_menu
                ################## 创建 models 部分信息 ######################                                    
                if m0:
                    m0['app_label']=app_label
                    m0['name']=u"%(name)s"%{'name':model.__name__}
                    if app_menu not in apps: apps[app_menu]={
                        'name':u"%(name)s"%{'name':_(app_menu)},
                        'models': [m0,],
                        'index': hasattr(app, '_menu_index') and app._menu_index or 9999
                        }
                    else:
                        apps[app_menu]['models'].append(m0)
            except TypeError:
                pass
            except:
                import traceback; traceback.print_exc()
                pass
    ###############  隐藏和排序处理(两级排序 ) ################################3
    if hide_visible_false:
        for k,v in apps.items():
            vmodels=[m for m in v['models'] if m["visible"]]    # 第三个条件
            v['models']=vmodels
    mlist=[(k,v) for k,v in apps.items() if v['models']]        # 第四个条件
    mlist.sort(lambda x1,x2: x1[1]['index']-x2[1]['index'])
    for m in mlist: 
        m[1]['models'].sort(lambda x1,x2: (x1['index']-x2['index']) or (x1['name']>=x2['name'] and 1 or -1))
    #return dict(mlist)不能排序
    cache.set(cache_key,mlist,60*60*24)
    return mlist
Example #12
0
def get_all_app_and_models(hide_visible_false=True):
    '''
    获取系统所有界面可视模型信息
    条件:
            对象类型:Model (_meta.app_label存在)   AppOperation (含 view 成员)
                             非 _meta.abstract
                             有 browse_model 权限            有 browse_model 权限
           配置项: verbose_name、visible、menu_index、app_menu、parent_model、select_related_perms、hide_perms、cancel_perms、menu_group
                         verbose_name、visible、_menu_index、_app_menu、_parent_model、_select_related_perms、_hide_perms、_cancel_perms、add_model_permission
    '''
    from django.conf import settings
    from base.translation import DataTranslation, _ugettext_ as _
    from django.db.models.loading import get_app
    from django.db import models
    from django.core.urlresolvers import reverse
    from django.core.cache import cache
    from middleware import threadlocals
    usr = threadlocals.get_current_user()
    cache_key = "%s_%s" % (usr.username, "menu_list")  # 当前用户菜单列表缓存名
    if usr.is_anonymous():
        cache.delete(cache_key)
    menu_list = None  #cache.get(cache_key)    # 不使用缓存
    if menu_list:
        return menu_list
    ################# 创建开始 ####################
    apps = {}
    for application in settings.INSTALLED_APPS:  # 首要条件必须在安装的app中
        if application in settings.INVISIBLE_APPS: continue  # 去掉隐藏的app
        app_label = application.split(".")[-1]
        apps[app_label] = {'models': [], 'is_app_true': 'true'}
    for app_label in apps.keys():
        app = get_app(app_label)  # django 关键 api 的使用
        apps[app_label]['name'] = u"%(name)s" % {
            'name':
            hasattr(app, "verbose_name") and app.verbose_name or unicode(
                DataTranslation.get_field_display(ContentType, 'app_label',
                                                  app_label))
        }
        apps[app_label]['index'] = hasattr(
            app, '_menu_index') and app._menu_index or 9999
        for i in dir(app):  # 条件二:在app.models 中的对象 如app/models/__init__.py
            app_menu = None
            try:
                model = app.__getattribute__(i)  # 得到成员对象
                m0 = {}
                ##################### model 对象 #####################
                if issubclass(model, models.Model) and (
                        model._meta.app_label
                        == app_label):  # 条件三:成员为model,app_label不为空
                    admin = hasattr(model, "Admin") and model.Admin or None
                    if not model._meta.abstract:
                        perm = '%s.%s_%s' % (model._meta.app_label, "browse",
                                             model.__name__.lower())
                        if usr.has_perm(perm):
                            m0 = {
                                'verbose_name': u"%(name)s" % {
                                    'name': model._meta.verbose_name
                                },
                                'model': model,
                                'index': 9999
                            }
                            if (not admin or not hasattr(admin, "visible")
                                    or admin.visible):
                                m0["visible"] = True
                            else:
                                m0["visible"] = False
                            if hasattr(admin, "menu_index"):
                                m0['index'] = admin.menu_index

                            if hasattr(admin, "parent_model"):
                                m0["parent_model"] = admin.parent_model
                            if hasattr(admin, "select_related_perms"):
                                m0["select_related_perms"] = admin.select_related_perms
                            if hasattr(admin, "hide_perms"):
                                m0["hide_perms"] = admin.hide_perms
                            if hasattr(admin, "cancel_perms"):
                                m0["cancel_perms"] = admin.cancel_perms
                            app_menu = app_label
                            if hasattr(admin, "app_menu"):
                                app_menu = admin.app_menu

                            m0['menu_group'] = hasattr(
                                admin, "menu_group"
                            ) and admin.menu_group or app_label  #未配置时取app_menu(即app_label)
                ##################### AppOperation 对象 #####################
                elif issubclass(model, AppOperation) and hasattr(
                        model, 'view'):  # 含view成员的 AppOperation
                    operation_flag = hasattr(
                        model,
                        'operation_flag') and model.operation_flag or "true"
                    menu_group = hasattr(
                        model, '_menu_group'
                    ) and model._menu_group or app_label  #未配置时取app_menu(即app_label)
                    if usr.has_perm("contenttypes.can_%s" % model.__name__):
                        m0 = {
                            'verbose_name': u"%(name)s" % {
                                'name':
                                hasattr(model, "verbose_name")
                                and model.verbose_name or
                                (u"%s" % _(model.__name__))
                            },
                            'model': None,
                            'operation': model,
                            'menu_group': menu_group,
                            'operation_flag': operation_flag,
                            #                            'url': reverse(model.view.im_func),
                            'index': 9999
                        }
                        if (not hasattr(model, 'visible')
                                or getattr(model, 'visible')):
                            m0["visible"] = True
                        else:
                            m0["visible"] = False
                        if hasattr(model, 'add_model_permission'):
                            m0["add_model_permission"] = model.add_model_permission
                        if hasattr(model, '_parent_model'):
                            m0["parent_model"] = model._parent_model
                        if hasattr(model, "_menu_index"):
                            m0['index'] = model._menu_index
                        if hasattr(model, "_select_related_perms"):
                            m0["select_related_perms"] = model._select_related_perms
                        if hasattr(model, "_hide_perms"):
                            m0["hide_perms"] = model._hide_perms
                        if hasattr(model, "_cancel_perms"):
                            m0["cancel_perms"] = model._cancel_perms
                        app_menu = app_label
                        if hasattr(model, "_app_menu"):
                            app_menu = model._app_menu
                ################## 创建 models 部分信息 ######################
                if m0:
                    m0['app_label'] = app_label
                    m0['name'] = u"%(name)s" % {'name': model.__name__}
                    if app_menu not in apps:
                        apps[app_menu] = {
                            'name':
                            u"%(name)s" % {
                                'name': _(app_menu)
                            },
                            'models': [
                                m0,
                            ],
                            'index':
                            hasattr(app, '_menu_index') and app._menu_index
                            or 9999
                        }
                    else:
                        apps[app_menu]['models'].append(m0)
            except TypeError:
                pass
            except:
                import traceback
                traceback.print_exc()
                pass
    ###############  隐藏和排序处理(两级排序 ) ################################3
    if hide_visible_false:
        for k, v in apps.items():
            vmodels = [m for m in v['models'] if m["visible"]]  # 第三个条件
            v['models'] = vmodels
    mlist = [(k, v) for k, v in apps.items() if v['models']]  # 第四个条件
    mlist.sort(lambda x1, x2: x1[1]['index'] - x2[1]['index'])
    for m in mlist:
        m[1]['models'].sort(lambda x1, x2: (x1['index'] - x2['index']) or
                            (x1['name'] >= x2['name'] and 1 or -1))
    #return dict(mlist)不能排序
    cache.set(cache_key, mlist, 60 * 60 * 24)
    return mlist
Example #13
0
    def save(self, *args, **kwargs):
        is_new = False
        if self.pk == None or self.create_time == None:
            is_new = True
        elif kwargs.get("force_insert", False):
            is_new = True
        if is_new and kwargs.get("force_update", False):
            is_new = False
        log_msg = kwargs.get('log_msg', True)  #默认为True
        #print "save: is_new=%s, self.pk=%s, self.create_time=%s, kwarg=%s"%(is_new, self.pk, self.create_time, kwargs)
        op = threadlocals.get_current_user()
        if op and op.is_anonymous(): op = None
        #print "save: %s self.status:%s"%(self.__class__.__name__,self.status)
        if is_new:
            self.create_time = datetime.datetime.now()
            if op: self.create_operator = op.username
        else:
            if self.status == STATUS_INVALID:  #标记为删除
                self.delete_time = datetime.datetime.now()
                if op: self.delete_operator = op.username
            else:  #修改
                self.change_time = datetime.datetime.now()
                if op: self.change_operator = op.username
            #pwp添加具体的修改信息

            old_obj = self.__class__.all_objects.filter(pk=self.pk)[0]
            change_info = []
            for field in old_obj._meta.fields:
                field_name = field.name
                if field_name == 'status' or field_name not in [
                        abs_field.name
                        for abs_field in CachingModel._meta.fields
                ]:  #只显示非自动维护字段的改变
                    old_value = getattr(old_obj, field_name)
                    new_value = getattr(self, field_name)
                    if new_value != old_value and (old_value or "None") != (
                            new_value or "None"):
                        change_info.append(u"%s(%s->%s)" %
                                           (field.verbose_name, old_value
                                            or "", new_value or ""))

            if kwargs.has_key('log_msg') and type(
                    kwargs['log_msg']) != bool:  #配置了指定写入的日志信息(默认写入)
                kwargs['log_msg'] = u"%s" % kwargs[
                    'log_msg']  #+ u";".join(change_info)
            elif change_info:
                kwargs['log_msg'] = u";".join(change_info)
            elif self.status != STATUS_INVALID:  #不是删除操作
                return  #没有修改任何数据,无须进行保存操作

        log_msg_content = kwargs.pop('log_msg', '')
        invalidate_cache = kwargs.pop('invalidate_cache', True)
        #print "save: %s, super save: %s"%(self.__class__.__name__,self.__dict__)

        super(CachingModel, self).save(*args, **kwargs)

        if self.Admin.cache and invalidate_cache:
            key = cache_key(self, self.pk)
            #print "\tinvalidate_cache:", key
            cache.delete(key)
        if log_msg or (
                self.Admin.log and log_msg != False
        ):  #log_msg设置了字符串,无论Admin.log都写日志;log_msg=False 表示强制不写日志
            from models_logentry import LogEntry, ADDITION, DELETION, CHANGE
            LogEntry.objects.log_action(
                user_id=op and op.pk or None,
                content_type_id=ContentType.objects.get_for_model(self).pk,
                object_id=self.pk,
                object_repr=force_unicode(self),
                action_flag=(is_new and ADDITION)
                or (self.status == STATUS_INVALID) and DELETION or CHANGE,
                change_message=log_msg_content or "")
        if is_new:
            try:
                for r in self._meta.get_all_related_objects():
                    if isinstance(r.field, models.OneToOneField):
                        r.model(**{r.field.name: self}).save()
            except:
                pass
Example #14
0
    def save(self, *args, **kwargs):
        is_new = False
        if self.pk == None or self.create_time == None:
            is_new = True
        elif kwargs.get("force_insert", False):
            is_new = True
        if is_new and kwargs.get("force_update", False):
            is_new = False
        log_msg = kwargs.get("log_msg", True)  # 默认为True
        # print "save: is_new=%s, self.pk=%s, self.create_time=%s, kwarg=%s"%(is_new, self.pk, self.create_time, kwargs)
        op = threadlocals.get_current_user()
        if op and op.is_anonymous():
            op = None
        # print "save: %s self.status:%s"%(self.__class__.__name__,self.status)
        if is_new:
            self.create_time = datetime.datetime.now()
            if op:
                self.create_operator = op.username
        else:
            if self.status == STATUS_INVALID:  # 标记为删除
                self.delete_time = datetime.datetime.now()
                if op:
                    self.delete_operator = op.username
            else:  # 修改
                self.change_time = datetime.datetime.now()
                if op:
                    self.change_operator = op.username
            # pwp添加具体的修改信息

            old_obj = self.__class__.all_objects.filter(pk=self.pk)[0]
            change_info = []
            for field in old_obj._meta.fields:
                field_name = field.name
                if field_name == "status" or field_name not in [
                    abs_field.name for abs_field in CachingModel._meta.fields
                ]:  # 只显示非自动维护字段的改变
                    old_value = getattr(old_obj, field_name)
                    new_value = getattr(self, field_name)
                    if new_value != old_value and (old_value or "None") != (new_value or "None"):
                        change_info.append(u"%s(%s->%s)" % (field.verbose_name, old_value or "", new_value or ""))

            if kwargs.has_key("log_msg") and type(kwargs["log_msg"]) != bool:  # 配置了指定写入的日志信息(默认写入)
                kwargs["log_msg"] = u"%s" % kwargs["log_msg"]  # + u";".join(change_info)
            elif change_info:
                kwargs["log_msg"] = u";".join(change_info)
            elif self.status != STATUS_INVALID:  # 不是删除操作
                return  # 没有修改任何数据,无须进行保存操作

        log_msg_content = kwargs.pop("log_msg", "")
        invalidate_cache = kwargs.pop("invalidate_cache", True)
        # print "save: %s, super save: %s"%(self.__class__.__name__,self.__dict__)

        super(CachingModel, self).save(*args, **kwargs)

        if self.Admin.cache and invalidate_cache:
            key = cache_key(self, self.pk)
            # print "\tinvalidate_cache:", key
            cache.delete(key)
        if log_msg or (self.Admin.log and log_msg != False):  # log_msg设置了字符串,无论Admin.log都写日志;log_msg=False 表示强制不写日志
            from models_logentry import LogEntry, ADDITION, DELETION, CHANGE

            LogEntry.objects.log_action(
                user_id=op and op.pk or None,
                content_type_id=ContentType.objects.get_for_model(self).pk,
                object_id=self.pk,
                object_repr=force_unicode(self),
                action_flag=(is_new and ADDITION) or (self.status == STATUS_INVALID) and DELETION or CHANGE,
                change_message=log_msg_content or "",
            )
        if is_new:
            try:
                for r in self._meta.get_all_related_objects():
                    if isinstance(r.field, models.OneToOneField):
                        r.model(**{r.field.name: self}).save()
            except:
                pass
Example #15
0
	def save(self):
		if not self.id:
			self.date = datetime.now()
		print get_current_user()
		self.user = get_current_user()
		super(Activity, self).save()