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 autodiscover_admin(adminsite=None): if not adminsite: from django.contrib.admin import site adminsite = site from model_i18n.translator import _translator from model_i18n.admin import setup_admin for m, t in _translator._registry_admin.items(): setup_admin(m, t, adminsite)
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