def register(self, master_model, translation_class=None, **options): """ Sets everything up for the given master model using a set of registration options (ModelTranslation attributes). If a translation class isn't given, it will use ModelTranslation (the default translation options). If keyword arguments are given -- e.g., fields -- they'll overwrite the translation_class attributes. """ if master_model in self._registry: raise AlreadyRegistered('The model "%s" has is already registered for translation' % master_model.__name__) # If not translation_class given use default options. if not translation_class: translation_class = ModelTranslation # If we got **options then dynamically construct a subclass of translation_class with those **options. if options: translation_class = type('%sTranslation' % master_model.__name__, (translation_class,), options) # Validate the translation_class (just in debug mode). if settings.DEBUG: from model_i18n.validation import validate validate(translation_class, master_model) opts = translation_class(master_model) # Set up master_model as a multilingual model using translation_class options translation_model = self.create_translation_model(master_model, opts) models.register_models(master_model._meta.app_label, translation_model) self.setup_master_model(master_model, translation_model) # This probably will become a class method soon. setup_admin(master_model, translation_model) # Setup django-admin support # Register the multilingual model and the used translation_class. self._registry[master_model] = opts
def register(self, master_model, translation_class=None, **options): if type(master_model) is str: app_path = ".".join(master_model.split(".")[:-1]) master_module_models = import_module(app_path + '.models') master_model = getattr(master_module_models, master_model.split(".")[-1]) #print master_model #return if master_model in self._registry: raise AlreadyRegistered('The model "%s" has is already \ registered for translation' % master_model.__name__) # If not translation_class given use default options. if not translation_class: translation_class = ModelTranslation # If we got **options then dynamically construct a # subclass of translation_class with those **options. if options: translation_class = type('%sTranslation' % \ master_model.__name__, (translation_class,), options) # Validate the translation_class (just in debug mode). if settings.DEBUG: from model_i18n.validation import validate validate(translation_class, master_model) transmanager_class = type('%sTransManager' % master_model.__name__, (TransManager, master_model.objects.__class__,), {}) livetransmanager_class = transmanager_class try: livetransmanager_class = type('%sLiveTransManager' % master_model.__name__, (TransManager, master_model.live_objects.__class__,), {}) except: pass master_model.add_to_class('_default_manager', TransManager()) master_model.add_to_class('_base_manager', TransManager()) master_model.add_to_class('objects', transmanager_class()) master_model.add_to_class('live_objects', livetransmanager_class()) opts = translation_class(master_model) # Set up master_model as a multilingual model # using translation_class options tmodel = self.create_translation_model(master_model, opts) tmodel.__unicode__ = lambda s: unicode(getattr(s, s._transmeta.master_field_name)) defaults = {'blank': True, 'null': True, 'editable': False} m2mfield = models.ManyToManyField(tmodel, **defaults) master_model.add_to_class("translations", m2mfield) # This probably will become a class method soon. self.setup_master_model(master_model, tmodel) if MODEL_I18N_DJANGO_ADMIN: self._registry_admin[master_model] = tmodel # Register the multilingual model and the used translation_class. self._registry[master_model] = opts
def register(self, master_model, translation_class=None, **options): """ Sets everything up for the given master model using a set of registration options (ModelTranslation attributes). If a translation class isn't given, it will use ModelTranslation (the default translation options). If keyword arguments are given -- e.g., fields -- they'll overwrite the translation_class attributes. """ if master_model in self._registry: raise AlreadyRegistered( 'The model "%s" has is already registered for translation' % master_model.__name__) # If not translation_class given use default options. if not translation_class: translation_class = ModelTranslation # If we got **options then dynamically construct a subclass of translation_class with those **options. if options: translation_class = type('%sTranslation' % master_model.__name__, (translation_class, ), options) # Validate the translation_class (just in debug mode). if settings.DEBUG: from model_i18n.validation import validate validate(translation_class, master_model) opts = translation_class(master_model) # Set up master_model as a multilingual model using translation_class options translation_model = self.create_translation_model(master_model, opts) models.register_models(master_model._meta.app_label, translation_model) self.setup_master_model( master_model, translation_model ) # This probably will become a class method soon. setup_admin(master_model, translation_model) # Setup django-admin support # Register the multilingual model and the used translation_class. self._registry[master_model] = opts
def register(self, master_model, translation_class=None, **options): if type(master_model) is str: app_path = ".".join(master_model.split(".")[:-1]) master_module_models = import_module(app_path + '.models') master_model = getattr(master_module_models, master_model.split(".")[-1]) if master_model in self._registry: raise AlreadyRegistered('The model "%s" has is already \ registered for translation' % master_model.__name__) # If not translation_class given use default options. if not translation_class: translation_class = ModelTranslation # If we got **options then dynamically construct a # subclass of translation_class with those **options. if options: translation_class = type('%sTranslation' % \ master_model.__name__, (translation_class,), options) # Validate the translation_class (just in debug mode). if settings.DEBUG: from model_i18n.validation import validate validate(translation_class, master_model) transmanager_class = type('%sTransManager' % master_model.__name__, ( TransManager, master_model.objects.__class__, ), {}) try: livetransmanager_class = type( '%sLiveTransManager' % master_model.__name__, ( TransManager, master_model.live_objects.__class__, ), {}) except: livetransmanager_class = type( '%sLiveTransManager' % master_model.__name__, ( TransManager, master_model.objects.__class__, ), {}) master_model.add_to_class('_default_manager', TransManager()) master_model.add_to_class('_base_manager', TransManager()) master_model.add_to_class('objects', transmanager_class()) master_model.add_to_class('live_objects', livetransmanager_class()) opts = translation_class(master_model) # Set up master_model as a multilingual model # using translation_class options tmodel = self.create_translation_model(master_model, opts) tmodel.__unicode__ = lambda s: unicode( getattr(s, s._transmeta.master_field_name)) # defaults = {'blank': True, 'null': True, 'editable': False, 'related_name': '%(app_label)s_%(class)s_related'} # m2mfield = models.ManyToManyField(tmodel, **defaults) # master_model.add_to_class("translations", m2mfield) # This probably will become a class method soon. self.setup_master_model(master_model, tmodel) if MODEL_I18N_DJANGO_ADMIN: self._registry_admin[master_model] = tmodel # Register the multilingual model and the used translation_class. self._registry[master_model] = opts