def _add_language_filter(self): if self._language_filter_tag: # pragma: no cover raise RuntimeError( 'Queryset is already tagged. This is a bug in hvad') self._language_filter_tag = True self.query.language_code = self._language_code if self._language_code == 'all': self._add_select_related() elif self._language_fallbacks: if self._raw_select_related: raise NotImplementedError('Using select_related along with ' 'fallbacks() is not supported') languages = tuple(get_language() if lang is None else lang for lang in (self._language_code, ) + self._language_fallbacks) masteratt = self.model._meta.get_field('master').attname alias = self.query.join( Join(self.model._meta.db_table, self.query.get_initial_alias(), None, LOUTER, BetterTranslationsField(languages, master=masteratt), True)) add_alias_constraints(self, (self.model, alias), id__isnull=True) self.query.add_filter(('%s__isnull' % masteratt, False)) if not self._skip_master_select and getattr(self, '_fields', None) is None: self.query.add_select_related(('master', )) else: language_code = self._language_code or get_language() self.query.add_filter(('language_code', language_code)) self._add_select_related() # if queryset is about to use the model's default ordering, we # override that now with a translated version of the model's ordering if self.query.default_ordering and not self.query.order_by: ordering = self.shared_model._meta.ordering self.query.order_by = self._translate_fieldnames(ordering or []) return self
def _add_language_filter(self): if self._language_filter_tag: # pragma: no cover raise RuntimeError('Queryset is already tagged. This is a bug in hvad') self._language_filter_tag = True if self._language_code == 'all': self._add_select_related(F('language_code')) elif self._language_fallbacks: if self._raw_select_related: raise NotImplementedError('Using select_related along with ' 'fallbacks() is not supported') languages = tuple(get_language() if lang is None else lang for lang in (self._language_code,) + self._language_fallbacks) masteratt = self.model._meta.get_field('master').attname alias = self.query.join(Join( self.model._meta.db_table, self.query.get_initial_alias(), None, LOUTER, BetterTranslationsField(languages, master=masteratt), True )) add_alias_constraints(self, (self.model, alias), id__isnull=True) self.query.add_filter(('%s__isnull' % masteratt, False)) if not self._skip_master_select and getattr(self, '_fields', None) is None: self.query.add_select_related(('master',)) else: language_code = self._language_code or get_language() self.query.add_filter(('language_code', language_code)) self._add_select_related(language_code) # if queryset is about to use the model's default ordering, we # override that now with a translated version of the model's ordering if self.query.default_ordering and not self.query.order_by: ordering = self.shared_model._meta.ordering self.query.order_by = self._translate_fieldnames(ordering or []) return self