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
Exemple #2
0
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