IT Блог

Документации и переводы

Статьи на технические темы

django-select2 in Django

Сходу использовать django_select2 в админке Django не получается из-за того, что django_select2 требует JQuery. Виджет django_select2 по умолчанию не подключает JQuery. Более подробно об этом вы можете прочитать на странице .

Чтобы быстро подключить jQuery к django_select2, сделайте следующее:


Key (extended_object_id) already exists.

При публикации страницы в django-cms (3.5.0) может возникнуть ошибка:

Exception Type: IntegrityError at /admin/cms/page/312/ru/publish/
Exception Value: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "spec_pageext_extended_object_id_key"
DETAIL: Ключ "(extended_object_id)=(324)" уже существует.

По-английски:

django.db.utils.IntegrityError: duplicate key value violates unique constraint "spec_pageext_extended_object_id_key"
DETAIL:  Key (extended_object_id)=(324) already exists.

Из трейсбека понятно, что ошибка связана с Extension (Расширение страницы).

Ещё нужно сказать, что ошибка не всегда проявляется при публикации страницы. Чтобы воспроизвести ошибку нужно:

  1. Создать расширение (или по-другому "Сохранить" из Меню / Страница / Моё расширение)
  2. Опубликовать страницу
  3. Перейти на черновую версию, щёлкнув "Изменить"
  4. Удалить расширение...

'NoneType' object has no attribute 'get_all_fields' parler

Если при создании своей миграции для добавления полей, которые должны быть переводимы, возникает ошибка:

'NoneType' object has no attribute 'get_all_fields'

1 вариант. Обновить parler до новой версии

В новых версиях parler эта ошибка устранена, поэтому достаточно обновить пакет. 

2 вариант. Добавить TranslatableModelMixin в базовые классы модели

Просто добавьте MyModel.__bases__ = (models.Model, TranslatableModelMixin) после объявления MyModel.

Для наглядности возьмём  и добавим необходимую строчку:

from django.db import migrations
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist


def forwards_func(apps, schema_editor):
    MyModel = apps.get_model('myapp', 'MyModel')
    MyModel.__bases__ = (models.Model, TranslatableModelMixin)
    MyModelTranslation = apps.get_model('myapp', 'MyModelTranslation')

    for object...

Add jquery to widget Django

Есть два простых способа добавить jQuery в формы или виджеты в админку django

1. Добавление другой версии jQuery

Сначала нужно . В качестве примера для этой статьи я использовал . Помещаем её, например, сюда: my_project/static/jquery/jquery-2.2.0.min.js.


Highcharts redraw diagrams

Обычно графики highcharts автоматически перерисовываются при изменении размеров окна браузера, но бывают случаи, когда нужно принудительно перерисовать график.

Интуиция подсказывает, что нужно использовать метод .redraw(), но, увы, возможно, это не сработает (как это случилось у меня). Мне, к примеру, нужно было перерисовывать диаграмму после сворачивания левой панели меню. Когда сворачивается или разворачивается меню, то ширина div-а изменяется и нужно автоматически подстраивать графики под новую ширину.

Для перерисовки диаграмм highcharts используйте метод .reflow():

$('..close').on('click.chart', function () {  // вешаем событие click на кнопку сворачивания меню
    var $sb_chart = $('.sb_chart');
    $.each($sb_chart, function () {  // если у вас несколько графиков
        var chart = $(this).highcharts();
        chart...

tar archive

Создание архива tar

tar -cvf file.tar /path/to/file_or_folder/   # создать .tar

С форматами .tar.gz и .tar.bz2 применяется ещё и сжатие:

tar -czvf file.tar.gz /path/to/file_or_folder/   # создать .tar.gz (популярный)
tar -cjvf file.tar.bz2 /path/to/file_or_folder/   # создать .tar.bz2

Распаковка архива .tar

tar -xvf file.tar.gz

Ключи команды tar

-c - создание архива
-v - подробный список обрабатываемых файлов
-f - работа с файлом
-z - сжатие архива с помощью gzip
-j - сжатие архива с помощью bzip2
-x - извлечение файлов из архива
-C - переход в каталог (см. подробности ниже)

Тонкости архивации

Замечали, что при распаковке архива...


Development of Levels social network

Уважаемые читатели!

Рад представить свой новый проект Levels -

Levels - это социальная сеть для спортсменов и людей, ведущих активный и здоровый образ жизни. Цели проекта - создать платформу, где люди могли бы почитать интересные статьи о здоровье и мотивации, посмотреть приготовление разнообразных блюд, составить план тренировок и питания, а также пообщаться с другими людьми, которые тоже ведут правильный образ жизни. В целом я хочу вдохновить людей повышать свою жизненную энергию, благодаря развитию тела и духа, правильному питанию, постановке положительных мыслей и так далее. Более подробно о проекте можно почитать на странице

Здесь же, в техническом разделе блога я буду описывать некоторые этапы...


html_content with attachment in django-post_office

Обнаружил странную проблему при прикреплении файла в django-post-office (по крайней мере это наблюдается в версии 2.0.8 и ниже): когда посылаешь письмо, состоящее из html-контента с прикреплением любого файла (неважно какого формата), то письмо приходит, но без прикрепленного файла.

Использовались версии пакетов:

django==1.10.7 (и ниже)
django-post-office==2.0.8 (и ниже)

Более подробно поведение django-post-office указанной версии и работу функции mail.send() можно описать так:

  1. Посылаешь письмо с обычным содержанием, используя параметр message, и прикрепляешь файл - работает правильно, т. е. видим и текст письма и вложение.
  2. Посылаешь письмо с содержанием, содержащее html-теги или даже обычный текст...

bundle.toolbar.min Cannot read property 'replace' of undefined

Ошибка Cannot read property 'replace' of undefined в файле bundle.toolbar.min.js может возникнуть, если на странице присутствуют два Django CMS placeholder-а.

В моём случае данная ошибка не позволяла открыть окно редактирования компонентов в некоторых заполнителях.


cannot alter table because it has pending trigger events

Ошибка cannot alter table because it has pending trigger events (нельзя выполнить ALTER TABLE, так как с этим объектом связаны отложенные события триггеров) чаще всего означает, что одно или несколько свойств полей не могут быть изменены за одну транзакцию. Если дословно переводить, может быть непонятно. Да и моя расшифровка не блещет полнотой передачи понимания, поэтому просто покажу примеры.

Убрать blank=True с полей

Допустим имеем модель:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
from django.utils.encoding import python_2_unicode_compatible


@python_2_unicode_compatible
class MyModel(models.Model):
    title = models.CharField(max_length=100, null=True, blank=True)
    content = models.TextField...

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте