docs: def contribute_to_class(self, cls, name, **kwargs):
          """
          Called at class type creation. So, this method is called, when
          metaclasses get created
          """
          # TODO: Apply 3 edge cases when not to create an intermediary model
          # specified in django.db.models.fields.related:1566
          # self.rel.through needs to be set prior to calling super, since
          # super(...).contribute_to_class refers to it.
          # Classes pointed to by a string do not need to be resolved here,
          # since Django does that at a later point in time - which is nice... ;)
          #
          # Superclasses take care of:
          # - creating the through class if unset
          # - resolving the through class if it's a string
          # - resolving string references within the through class
          if not self.remote_field.through and \
                  not cls._meta.abstract and \
                  not cls._meta.swapped:
              # We need to anticipate some stuff, that's done only later in
              # class contribution
              self.set_attributes_from_name(name)
              self.model = cls
              self.remote_field.through = VersionedManyToManyField.\
                  create_versioned_many_to_many_intermediary_model(self, cls,
                                                                   name)
          super(VersionedManyToManyField, self).contribute_to_class(cls, name)
  
          # Overwrite the descriptor
          if hasattr(cls, self.name):
              setattr(cls, self.name,
                      VersionedManyToManyDescriptor(self.remote_field))