Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
dj-kaos / building_blocks / configs.py
Size: Mime:
from dj_kaos.models.configs import ModelConfig
from dj_kaos.models.consts import FieldsetHeader


class HasRelatedFieldConfig(ModelConfig):
    def __init__(self, model_or_config, field_name,
                 edit_readonly=False,
                 fieldset_header=None,
                 **kwargs):
        super().__init__(**kwargs)
        self.related_config = model_or_config if isinstance(model_or_config, ModelConfig) else model_or_config.config

        self.fields = (field_name,)
        self.list_display = (field_name,)
        self.list_filter = (field_name,)
        self.list_filter_autocomplete = (field_name,)
        if edit_readonly:
            self.edit_readonly_fields = (field_name,)

        self._fieldsets = {
            fieldset_header: {'fields': (field_name,)},
        }
        self.filterset_fields = self.related_config.make_nested_filterset_fields(field_name)


class HasDescriptionModelConfig(ModelConfig):
    fields = ('description',)
    _fieldsets = {
        FieldsetHeader.DETAILS: {'fields': fields, 'classes': ('collapse', 'collapsed')}
    }


class HasMediaModelConfig(ModelConfig):
    def __init__(self, *media_fields: str, **kwargs):
        super().__init__(**kwargs)
        self.media_fields = media_fields
        self.fields = media_fields
        self._fieldsets = {
            FieldsetHeader.MEDIA: {
                'fields': media_fields,
                'classes': ('collapse', 'collapsed'),
            }
        }


class TitledModelConfig(ModelConfig):
    readonly_fields = ('__str__',)
    list_display = ('__str__',)
    fields = ('__str__',)
    _fieldsets = {
        None: {'fields': fields},
    }


class StatusIconsModelConfig(ModelConfig):
    list_display = ('status_icons_display',)
    _orders = {
        'list_display': 1000,
    }


__all__ = (
    'HasRelatedFieldConfig',
    'HasDescriptionModelConfig',
    'HasMediaModelConfig',
    'StatusIconsModelConfig',
)