Ejemplo n.º 1
0
 def update(self, *args, **kwargs):
     if self.lang and self.lang != get_master_language(self.model):
         update_count = 0
         for obj in list(self):
             update_count += obj.save(values=kwargs)
         return update_count
     return super(TransQuerySet, self).update(*args, **kwargs)
Ejemplo n.º 2
0
 def update(self, *args, **kwargs):
     if self.lang and self.lang != get_master_language(self.model):
         update_count = 0
         for obj in list(self):
             update_count += obj.save(values=kwargs)
         return update_count
     return super(TransQuerySet, self).update(*args, **kwargs)
Ejemplo n.º 3
0
    def get_translations(self, languages, language=None):
        """ Adds any non-master new languages in parameter to requested
        languages list (self.languages) and build the new query joins rules

        We do not do anything if no new languages were passed

        `language` parameter will be set as implicit language (self.lang)
                   if passed
        """
        if language and language not in languages:
            languages.append(language)

        # filter added languages and master language
        master = get_master_language(self.model)
        new = set((lang for lang in languages
                        if lang and lang != master)) - self.languages

        if language not in (self.lang, master): # set implicit language
            self.lang = language

        if new: # if there's any language to add
            rules = [ TransJoin(self.model, lang) for lang in new ]
            join = reduce(operator.and_, rules) if len(rules) > 1 else rules[0]
            self.languages |= new
            return self.filter(join)
        return self
Ejemplo n.º 4
0
    def get_translations(self, languages, language=None):
        """ Adds any non-master new languages in parameter to requested
        languages list (self.languages) and build the new query joins rules

        We do not do anything if no new languages were passed

        `language` parameter will be set as implicit language (self.lang)
                   if passed
        """
        if language and language not in languages:
            languages.append(language)

        # filter added languages and master language
        master = get_master_language(self.model)
        new = set((lang for lang in languages
                   if lang and lang != master)) - self.languages

        if language not in (self.lang, master):  # set implicit language
            self.lang = language

        if new:  # if there's any language to add
            rules = [TransJoin(self.model, lang) for lang in new]
            join = reduce(operator.and_, rules) if len(rules) > 1 else rules[0]
            self.languages |= new
            return self.filter(join)
        return self
Ejemplo n.º 5
0
    def set_language(self, language):
        """ Defines/switch query set implicit language, attributes on
        result instances will be switched to this language on change_fields
        """
        languages = list(self.languages)
        if language and (language in languages or language == get_master_language(self.model)):
            return self
        languages.append(language)
        self.languages = set(languages)
        self.lang = language

        return self.filter(TransJoin(self.model, self.lang))
Ejemplo n.º 6
0
    def set_language(self, language):
        """ Defines/switch query set implicit language, attributes on
        result instances will be switched to this language on change_fields
        """
        languages = list(self.languages)
        if language and (language in languages or \
           language == get_master_language(self.model)):
            return self
        languages.append(language)
        self.languages = set(languages)
        self.lang = language

        return self.filter(TransJoin(self.model, self.lang))
Ejemplo n.º 7
0
 def filter(self, *args, **kwargs):
     if self.lang and self.lang != get_master_language(self.model):
         from model_i18n.utils import get_translation_opt
         translatable_fields = \
         get_translation_opt(self.model, 'translatable_fields')
         aps = []
         for k, v in kwargs.items():
             if "translations" not in k and k in translatable_fields:
                 k = "translations__%s" % k
             aps.append(Q(**{k: v}))
         if aps:
             qu = aps.pop()
             for item in aps:
                 qu &= item
             return super(TransQuerySet, self).filter(qu)
     return super(TransQuerySet, self).filter(*args, **kwargs)
Ejemplo n.º 8
0
 def filter(self, *args, **kwargs):
     if self.lang and self.lang != get_master_language(self.model):
         from model_i18n.utils import get_translation_opt
         translatable_fields = \
         get_translation_opt(self.model, 'translatable_fields')
         aps = []
         for k, v in kwargs.items():
             if "translations" not in k and k in translatable_fields:
                 k = "translations__%s" % k
             aps.append(Q(**{k: v}))
         if aps:
             qu = aps.pop()
             for item in aps:
                 qu &= item
             return super(TransQuerySet, self).filter(qu)
     return super(TransQuerySet, self).filter(*args, **kwargs)
Ejemplo n.º 9
0
 def delete(self, *args, **kwargs):
     if self.lang and self.lang != get_master_language(self.model):
         for obj in list(self):
             obj.save(delete=True)
         return None
     return super(TransQuerySet, self).delete(*args, **kwargs)
Ejemplo n.º 10
0
 def is_trans_query(self):
     return self.lang and self.lang != get_master_language(self.model)
Ejemplo n.º 11
0
 def delete(self, *args, **kwargs):
     if self.lang and self.lang != get_master_language(self.model):
         for obj in list(self):
             obj.save(delete=True)
         return None
     return super(TransQuerySet, self).delete(*args, **kwargs)
Ejemplo n.º 12
0
 def is_trans_query(self):
     return self.lang and self.lang != get_master_language(self.model)