admin-dj-helpers


Nameadmin-dj-helpers JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryUseful utilities for Django Admin with global search support
upload_time2025-07-16 22:32:38
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords admin django framework globalsearch helpers utilities web
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Admin Django Helpers

Полезные помощники и утилиты для Django Admin с поддержкой глобального поиска.

## 🚀 Возможности

- **Глобальный поиск**: Легко добавьте функциональность глобального поиска в Django Admin
- **Миксины для моделей**: Удобные миксины для расширения функциональности моделей
- **Готовые действия**: Полезные действия для админ-панели
- **Контекстные процессоры**: Дополнительные контекстные процессоры для шаблонов
- **Шаблонные теги**: Набор полезных шаблонных тегов

## 📦 Установка
```bash
pip install admin-dj-helpers
```

## ⚙️ Быстрый старт

### 1. Добавьте приложение в settings.py

```python
INSTALLED_APPS = [
    'admin_dj_helpers', # обязательно первым в перед django.contrib.admin
    'admin_dj_helpers.global_search', # Для добавления глобального поиска
    'admin_dj_helpers.actions', # Для добавления действий
    'django.admin.contrib',
    '...',
]
```

### 2. Используйте GlobalSearchMixin в ваших моделях

```python 
from django.db import models 
from admin_helpers.global_search.mixin import GlobalSearchMixin

class Article(GlobalSearchMixin, models.Model): 
    title = models.CharField(max_length=200) 
    content = models.TextField() 
    author = models.CharField(max_length=100)
    
    # Настройка глобального поиска
    search_icon = 'fa-solid fa-newspaper'
    search_description = 'Статьи сайта'

    @classmethod
    def get_global_search_fields(cls, query_string: str):
        return [
            'title',
            'content',
            'author'
        ]
    
    def __str__(self):
        return self.title

    
```

### 3. Настройте контекстные процессоры

```python
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'admin_helpers.context_processors.settings', # Обязателен для работы поиска и действий
            ],
        },
    },
]
```

## 📚 Подробная документация

### GlobalSearchMixin

Миксин для добавления поддержки глобального поиска к вашим моделям.

#### Настройки класса:

- `search_icon` - иконка для отображения в результатах поиска (FontAwesome)
- `search_description` - описание модели для поиска
- `search_order_by` - поле для сортировки результатов
- `order_in_search` - порядок отображения в результатах


#### Обязательные методы:

```python 
@classmethod 
def get_global_search_fields(cls, query_string: str) -> List[str]: 
    """ Возвращает список полей для поиска """ 
    return ['field1', 'field2']
```

#### Опциональные методы:

```python 
@classmethod 
def get_search_item(cls, obj, request) -> Dict[str, str]: 
    """ Кастомизация элемента в результатах поиска """ 
    return { 
        'type': 'model', 
        'icon': cls.search_icon, 
        'title': str(obj), 
        'description': repr(obj), 
        'url': None, 
        'model_name': cls._meta.verbose_name 
    }
```

## 🔧 Требования

- Python >= 3.9
- Django >= 3.2

## 🤝 Поддерживаемые версии Django

- Django 3.2+
- Django 4.0+
- Django 4.1+
- Django 4.2+
- Django 5.0+
- Django 5.1+

## 📄 Лицензия

MIT License. Подробности в файле [LICENSE](LICENSE).

## 🐛 Сообщить об ошибке

Если вы нашли ошибку или у вас есть предложения по улучшению, пожалуйста, создайте issue в [GitHub репозитории](https://github.com/migelbd/admin-dj-helpers/issues).

## 📊 Статус разработки

Проект находится в стадии активной разработки (Alpha). API может изменяться.

---

Сделано с ❤️ для Django сообщества

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "admin-dj-helpers",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "admin, django, framework, globalsearch, helpers, utilities, web",
    "author": null,
    "author_email": "Mikhail B <mikhail@devilweb.ru>",
    "download_url": "https://files.pythonhosted.org/packages/97/8a/2a80b60fef822883571b436276d4d6299ea28203696042f19ca40b6c3091/admin_dj_helpers-0.1.0.tar.gz",
    "platform": null,
    "description": "# Admin Django Helpers\n\n\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0438 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f Django Admin \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430.\n\n## \ud83d\ude80 \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\n\n- **\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a**: \u041b\u0435\u0433\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 Django Admin\n- **\u041c\u0438\u043a\u0441\u0438\u043d\u044b \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439**: \u0423\u0434\u043e\u0431\u043d\u044b\u0435 \u043c\u0438\u043a\u0441\u0438\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439\n- **\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f**: \u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438\n- **\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b**: \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0434\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432\n- **\u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0433\u0438**: \u041d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0433\u043e\u0432\n\n## \ud83d\udce6 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n```bash\npip install admin-dj-helpers\n```\n\n## \u2699\ufe0f \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n### 1. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 settings.py\n\n```python\nINSTALLED_APPS = [\n    'admin_dj_helpers', # \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u043f\u0435\u0440\u0435\u0434 django.contrib.admin\n    'admin_dj_helpers.global_search', # \u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\n    'admin_dj_helpers.actions', # \u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439\n    'django.admin.contrib',\n    '...',\n]\n```\n\n### 2. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 GlobalSearchMixin \u0432 \u0432\u0430\u0448\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u044f\u0445\n\n```python \nfrom django.db import models \nfrom admin_helpers.global_search.mixin import GlobalSearchMixin\n\nclass Article(GlobalSearchMixin, models.Model): \n    title = models.CharField(max_length=200) \n    content = models.TextField() \n    author = models.CharField(max_length=100)\n    \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\n    search_icon = 'fa-solid fa-newspaper'\n    search_description = '\u0421\u0442\u0430\u0442\u044c\u0438 \u0441\u0430\u0439\u0442\u0430'\n\n    @classmethod\n    def get_global_search_fields(cls, query_string: str):\n        return [\n            'title',\n            'content',\n            'author'\n        ]\n    \n    def __str__(self):\n        return self.title\n\n    \n```\n\n### 3. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b\n\n```python\nTEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': [BASE_DIR / 'templates'],\n        'APP_DIRS': True,\n        'OPTIONS': {\n            'context_processors': [\n                'django.template.context_processors.request',\n                'django.contrib.auth.context_processors.auth',\n                'django.contrib.messages.context_processors.messages',\n                'admin_helpers.context_processors.settings', # \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439\n            ],\n        },\n    },\n]\n```\n\n## \ud83d\udcda \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\n\n### GlobalSearchMixin\n\n\u041c\u0438\u043a\u0441\u0438\u043d \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043a \u0432\u0430\u0448\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044f\u043c.\n\n#### \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043b\u0430\u0441\u0441\u0430:\n\n- `search_icon` - \u0438\u043a\u043e\u043d\u043a\u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u043f\u043e\u0438\u0441\u043a\u0430 (FontAwesome)\n- `search_description` - \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430\n- `search_order_by` - \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432\n- `order_in_search` - \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445\n\n\n#### \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b:\n\n```python \n@classmethod \ndef get_global_search_fields(cls, query_string: str) -> List[str]: \n    \"\"\" \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \"\"\" \n    return ['field1', 'field2']\n```\n\n#### \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b:\n\n```python \n@classmethod \ndef get_search_item(cls, obj, request) -> Dict[str, str]: \n    \"\"\" \u041a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u043f\u043e\u0438\u0441\u043a\u0430 \"\"\" \n    return { \n        'type': 'model', \n        'icon': cls.search_icon, \n        'title': str(obj), \n        'description': repr(obj), \n        'url': None, \n        'model_name': cls._meta.verbose_name \n    }\n```\n\n## \ud83d\udd27 \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\n\n- Python >= 3.9\n- Django >= 3.2\n\n## \ud83e\udd1d \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Django\n\n- Django 3.2+\n- Django 4.0+\n- Django 4.1+\n- Django 4.2+\n- Django 5.0+\n- Django 5.1+\n\n## \ud83d\udcc4 \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\n\nMIT License. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 [LICENSE](LICENSE).\n\n## \ud83d\udc1b \u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435\n\n\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u0448\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0438\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 issue \u0432 [GitHub \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438](https://github.com/migelbd/admin-dj-helpers/issues).\n\n## \ud83d\udcca \u0421\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\n\n\u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (Alpha). API \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f.\n\n---\n\n\u0421\u0434\u0435\u043b\u0430\u043d\u043e \u0441 \u2764\ufe0f \u0434\u043b\u044f Django \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Useful utilities for Django Admin with global search support",
    "version": "0.1.0",
    "project_urls": null,
    "split_keywords": [
        "admin",
        " django",
        " framework",
        " globalsearch",
        " helpers",
        " utilities",
        " web"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "75394e36c7e47eaac6d5a36fe0ac3dc32a48282de8ad178bb2e3a6800138ba9b",
                "md5": "d4d610566754b3b6fb0ada88d33fb42d",
                "sha256": "24d03cbe4408875c191fdcf144f9158cb8f7aa9d355ca37fc50c81752aa28aa3"
            },
            "downloads": -1,
            "filename": "admin_dj_helpers-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d4d610566754b3b6fb0ada88d33fb42d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 826488,
            "upload_time": "2025-07-16T22:32:36",
            "upload_time_iso_8601": "2025-07-16T22:32:36.066494Z",
            "url": "https://files.pythonhosted.org/packages/75/39/4e36c7e47eaac6d5a36fe0ac3dc32a48282de8ad178bb2e3a6800138ba9b/admin_dj_helpers-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "978a2a80b60fef822883571b436276d4d6299ea28203696042f19ca40b6c3091",
                "md5": "76d5673deed93fefc8cd812e9666ccc7",
                "sha256": "8f5ab7e8aac29a49bcd7af8d57fc01eecba183cdf9798091874ec814d85c29ef"
            },
            "downloads": -1,
            "filename": "admin_dj_helpers-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "76d5673deed93fefc8cd812e9666ccc7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 812697,
            "upload_time": "2025-07-16T22:32:38",
            "upload_time_iso_8601": "2025-07-16T22:32:38.311019Z",
            "url": "https://files.pythonhosted.org/packages/97/8a/2a80b60fef822883571b436276d4d6299ea28203696042f19ca40b6c3091/admin_dj_helpers-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-16 22:32:38",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "admin-dj-helpers"
}
        
Elapsed time: 0.48499s