IT Блог
Документации и переводы
Статьи на технические темы
pipenv docker compose в PyCharm
На момент публикации страницы PyCharm не поддерживает pipenv с docker (тикет:
Как вы знаете, Pipenv устанавливает зависимости по разным путям, таким как /home/vivazzi/.local/share/virtualenvs/vivivys-pxi3oUGW/bin/python
, где vivivys-pxi3oUG
генерируется по-разному в зависимости от разных факторов. С другой стороны, Pycharm требует указать конкретный путь к интерпретатору:
Обратите внимание, что в этом окне мы не можем видеть сгенерированный путь к интерпретатору, поэтому в следующем окне (щелчок через многоточие) мы не знаем, что мы должны ввести:
Если вы введёте путь к глобальному интерпретатору (что-то вроде: /usr/bin/python
или /usr/local/bin/python
), вы сможете создать доступ к удалённому интерпретатору, но ваше ведь ваше приложение...
content types AttributeError: 'NoneType' object has no attribute '_base_manager'
... File "/project/core/views/others.py", line 46, in tag_page obj = item.content_object File "/project/env/lib/python3.8/site-packages/django/contrib/contenttypes/fields.py", line 241, in __get__ rel_obj = ct.get_object_for_this_type(pk=pk_val) File "/project/env/lib/python3.8/site-packages/django/contrib/contenttypes/models.py", line 175, in get_object_for_this_type return self.model_class()._base_manager.using(self._state.db).get(**kwargs) AttributeError: 'NoneType' object has no attribute '_base_manager'
Данная ошибка связана с тем, что django приложение contenttypes
не может определить content_object
по названию модели и приложения в таблице данных django_content_type
. Такая ошибка может появится после изменения имени приложения (напр., у вас было приложение students, а вы поменяли его на school). И если у вас в моделях есть поля типа GenericForeignKey
, то content_type
(а точнее content_type_id
) может ссылаться на устаревшую запись в...
Переопределить Config приложения Django, создаётся лишняя миграция django-cms
Иногда требуется переопределить Config
по разным причинам.
Например, в моём случае после обновления django 3.2+ стала автоматически создаваться миграция для django-cms, когда вызываешь makemigrations
для своего проекта.
Именно в этой ошибке такое поведение возникло из-за введения default_auto_field
(см: DEFAULT_AUTO_FIELD
в значение отличное от django.db.models.AutoField
, а именно django.db.models.BigAutoField
. Поэтому при вызове makemigrations
стала создаваться миграция, в которой для всех моделей django-cms тип поля ID
становился BigAutoField
.
Чтобы исправить ошибку выше, нужно переопределить CMSConfig
, в каком-нибудь своём приложении в любом файле, но для конвенции лучше в apps.py
:
# spec/apps.py from cms.apps import...
Добавление copy_relations за пределами плагина с помощью signals в django cms
В django-cms иногда необходимо добавить или расширить copy_relations()
в модели стороннего плагина для обработки внешних ключей: ForeignKey
, OneToOneField
или ManyToManyField
.
Например, есть некое стороннее приложение (cms плагин) text_block
с моделью TextBlock
:
# models.py class TextBlock(CMSPlugin): title = models.CharField(_('Title'), max_length=255) content = models.TextField(_('Content')) # cms_plugins.py class TextBlockPlugin(CMSPluginBase): model = TextBlock name = 'TextBlock' render_template = 'text_block.html'
И нам нужно добавить какое-нибудь дополнительное поле, например, description
(описание).
Для этого добавляем в проект новое приложение, например, text_block_ext
с моделью TextBlockExt
:
class TextBlockExt(models.Model): text_block = models.OneToOneField(TextBlock, on_delete=models.CASCADE) description = models.TextField(_('Description'))
Ext
(в слове TextBlockExt
) - это сокращение слова Extension...
django.urls.exceptions.NoReverseMatch при создании sitemap django AppHookConfig
При использовании aldryn-apphooks-config (или без него, при стандартном использовании apphooks) может возникнуть ошибка при создании sitemap
, например, такая:
return reverse('{}:category'.format(self.app_config.namespace), kwargs={'slug': self.slug}) django.urls.exceptions.NoReverseMatch: Reverse for 'category' not found. 'category' is not a valid view function or pattern name.
При использовании модели, например, такой:
class Category(models.Model): app_config = AppHookConfigField(AlbumConfig, verbose_name='Конфигурация') title = models.CharField('Название', max_length=80) slug = models.SlugField('Путь', max_length=80, unique=True) objects = ActiveQuerySet.as_manager() def get_absolute_url(self): return reverse('{}:category'.format(self.app_config.namespace), kwargs={'slug': self.slug}) def __str__(self): return self.title class Meta(object): verbose_name = 'Категория' verbose_name_plural = 'Категории'
И sitemap:
class SBAlbumCategorySitemap(Sitemap): changefreq = 'monthly' priority = 0.5 i18n = True def items(self): return Category.objects.all()
Хотя на сайте...
django-cms this.ui.container.data(...).push is not a function
В django 3.7.X (возможно, и в более ранней версии) до текущей 3.8.0 (на момент написания статьи) существует ошибка при открытии структуры страницы:
`Uncaught TypeError: this.ui.container.data(...).push is not a function at s.initialize (bundle.toolbar.min.js:1)
Возникает она тогда, когда шаблон содержит несколько static_placeholder
с одинаковыми именами, например: {% static_placeholder 'header' %}
.
На гитхабе есть тикет
Покопавшись в файле bundle.toolbar.min.js
, где возникает ошибка, я смог найти временное решение.
Временное решение ошибки
Нужно скопировать файл /path_to_env_of_my_project/lib/python3.8/site-packages/cms/static/cms/js/dist/3.8.0/bundle.toolbar.min.js
в /path_to_my_project/static/cms/js/dist/3.8.0/bundle.toolbar.min.js
.
Обратите внимание, что вместо имени папки 3.8.0
используйте имя папки соответствующее вами используемой версии django-cms....
Установка python 3
Установка из репозиториев
apt update sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa apt update sudo apt install python3.9
Теперь можно проверить, что python установился:
$ python3.9 -V Python 3.9.4
Если во время apt update
после добавления репозитория возникает ошибка:
E: Репозиторий «http://ppa.launchpad.net/deadsnakes/ppa/ubuntu hirsute Release» не содержит файла Release
Можно попытаться исправить ошибку, вписав вместо hirsute доступный репозиторий, который можно найти на странице apt update
может возникнуть ошибка:
Ошб:5 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY BA6932366A755776 Чтение списков пакетов… Готово W: Ошибка GPG: http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic...
Couldn't install package: rcssmin
С установкой django-compressor или другим пакетом может возникнуть ошибка установки пакета rcssmin:
[pipenv.exceptions.InstallError]: In file included from rcssmin.c:18: _setup/include/cext.h:34:10: fatal error: Python.h: Нет такого файла или каталога 34 | #include "Python.h" | ^~~~~~~~~~ compilation terminated. error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1 ---------------------------------------- ERROR: Command errored out with exit status 1 ERROR: Couldn't install package: rcssmin
pip
Используя pip, вы можете установить rcssmin через флаг --install-option="--without-c-extensions"
:
pip install rjsmin --install-option="--without-c-extensions"
И тогда django-compressor и другие пакеты, требующие rcssmin установятся успешно.
pipenv
pipenv на момент написания статьи не поддерживает флаг --install-option
, поэтому нужно установить pythonX-dev, где...
Json в mql: JAson
В MQL нет возможности хранить данные различных типов через стандартные типы данных, как это можно сделать в python через словари или в javascript через объекты. Так как MQL типизированный язык, то реализация данных в виде словаря, где хранятся данные в виде пар "ключ - значение", весьма трудоёмко. К счастью, есть замечательная библиотека JAson, которая позволяет хранить данные различных типов в виде словаря, а если быть точнее, то в виде JSON. Также библиотека преобразовывать JSON объект в виде строки и обратно.
Код библиотеки можно найти на странице
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.