Пример #1
0
    def index_model(self, index, fields=None):
        model_name = class_name_from_parts(index.name, 'index')

        class Meta:
            apps = self.apps
            app_label = 'indexing'
            db_table = db_table_for_index(index)

        attrs = {'Meta': Meta, '__module__': '__fake__'}

        fields = index.fields if fields is None else fields
        for field_name, index_field in six.iteritems(fields):
            if not index_field.multi_value:
                db_field = db_field_for_index_field(field_name, index_field)
                attrs[field_name] = db_field

        model = type(model_name, (models.Model, ), attrs)
        related_models = {}

        for field_name, index_field in six.iteritems(fields):
            if index_field.multi_value:
                related_model = self.index_multi_value_field(
                    index, model, field_name, index_field
                )

                related_models[field_name] = related_model

        return model, related_models
Пример #2
0
    def index_multi_value_field(
        self, index, index_model, field_name, index_field
    ):
        model_name = class_name_from_parts(index.name, 'index', field_name)

        class Meta:
            apps = self.apps
            app_label = 'indexing'
            db_table = db_table_for_index(index, field_name)

        attrs = {
            'Meta': Meta,
            '__module__': '__fake__',
            'index': models.ForeignKey(
                index_model,
                related_name=field_name
            ),
            'value': db_field_for_index_field('value', index_field)
        }

        model = type(model_name, (models.Model, ), attrs)
        return model