Пример #1
0
def register_draft_only(model_class, fields, follow, format):
    """
    version of the reversion register function that only registers drafts and
    ignores public models
    """
    revision_manager = reversion.revision
    if revision_manager.is_registered(model_class):
        raise RegistrationError(
            "%r has already been registered with Reversion." % model_class)

    # Ensure the parent model of proxy models is registered.
    if (model_class._meta.proxy and not revision_manager.is_registered(
            model_class._meta.parents.keys()[0])):
        raise RegistrationError(
            '%r is a proxy model, and its parent has not been registered with'
            'Reversion.' % model_class)

    # Calculate serializable model fields.
    opts = model_class._meta
    local_fields = opts.local_fields + opts.local_many_to_many
    if fields is None:
        fields = [field.name for field in local_fields]
    fields = tuple(fields)

    # Register the generated registration information.
    follow = tuple(follow)
    registration_info = VersionAdapter(model_class)
    registration_info.fields = fields
    registration_info.follow = follow
    registration_info.format = format
    revision_manager._registered_models[model_class] = registration_info
def register_draft_only(model_class, fields, follow, format):
    """
    version of the reversion register function that only registers drafts and
    ignores public models
    """
    # FIXME: Remove this when integrating djangocms-reversion
    if revision_manager.is_registered(model_class):
        raise RegistrationError(
            "%r has already been registered with Reversion." % model_class)

    # Ensure the parent model of proxy models is registered.
    if (model_class._meta.proxy and not revision_manager.is_registered(
            list(model_class._meta.parents.keys())[0])
        ):  # turn KeysView into list
        raise RegistrationError(
            '%r is a proxy model, and its parent has not been registered with'
            'Reversion.' % model_class)

    # Calculate serializable model fields.
    opts = model_class._meta
    local_fields = opts.local_fields + opts.local_many_to_many
    if fields is None:
        fields = [field.name for field in local_fields]
    fields = tuple(fields)

    # Register the generated registration information.
    follow = tuple(follow)

    try:
        registration_info = VersionAdapter(
            fields=fields,
            follow=follow,
            format=format,
            for_concrete_model=True,
            ignore_duplicates=False,
        )
    except TypeError:
        registration_info = VersionAdapter(model_class)
        registration_info.fields = fields
        registration_info.follow = follow
        registration_info.format = format
    if hasattr(revision_manager, '_registration_key_for_model'):
        model_key = revision_manager._registration_key_for_model(model_class)
    else:
        model_key = model_class
    revision_manager._registered_models[model_key] = registration_info
Пример #3
0
 def _autoregister(self, model, follow=None):
     """Registers a model with reversion, if required."""
     if model._meta.proxy:
         raise RegistrationError("Proxy models cannot be used with django-reversion, register the parent class instead")
     if not self.revision_manager.is_registered(model):
         follow = follow or []
         for parent_cls, field in model._meta.parents.items():
             follow.append(field.name)
             self._autoregister(parent_cls)
         self.revision_manager.register(model, follow=follow, format=self.reversion_format)
Пример #4
0
 def _autoregister(self, model, follow=None):
     """Registers a model with reversion, if required."""
     if model._meta.proxy:
         raise RegistrationError(
             "{model} is a proxy model, and cannot be used with django-reversion, register the parent class ({model_parent}) instead."
             .format(  # noqa
                 model=model.__name__,
                 model_parent=', '.join(
                     [x.__name__ for x in model._meta.parents.keys()])))
     if not self.revision_manager.is_registered(model):
         follow = follow or []
         for parent_cls, field in model._meta.parents.items():
             follow.append(field.name)
             self._autoregister(parent_cls)
         self.revision_manager.register(model,
                                        follow=follow,
                                        format=self.reversion_format)