Ответы пользователя по тегу Django
  • Django расширение формсета для ManyToMany through таблиц?

    vmm86
    @vmm86
    Software Developer
    1) Поле для сохдания M2M-связи достаточно указать только в одной из связываемых моделей.
    2) Явно указывать связующую M2M-модель с атрибутом through имеет смысл тогда, если в этой связующей модели должны содержаться другие поля, помимо первичных ключей двух связываемых моделей.
    3) Редактировать связки, содержащиеся в M2M-модели, можно в админ-панели Django с помощью стандартных инлайн-форм.
    Ответ написан
    Комментировать
  • Как сделать локализацию в моделях Django?

    vmm86
    @vmm86
    Software Developer
    Недавно был пост в RSS-ленте Django Community, где автор перечисляет возможные походы к локализации содержимого моделей и предлагает своё расширение django-translated-fields.
    Ответ написан
    Комментировать
  • Как правильно поступать с SECRET_KEY при пуше на github?

    vmm86
    @vmm86
    Software Developer
    Можно в файле настроек settings.py пытаться получить SECRET_KEY из произвольного py-файла (НЕ добавляемого в систему контроля версий), который будет находиться по какому-то пути в проекте, а если этого файла при первом запуске нет - сгенерировать SECRET_KEY случайным образом, записать в этот файл и потом при новых перезапусках сервера получать его оттуда.
    # settings.py
    try:
        from some_package.secret_key_file import SECRET_KEY
    except ImportError:
        from django.utils.crypto import get_random_string
        SECRET_KEY = get_random_string(50, 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)')
        with open(os.path.join(BASE_DIR, 'some_package', 'secret_key_file.py'), 'w') as key_file:
            key_file.write("SECRET_KEY = '{key}'".format(key=SECRET_KEY))

    P.S. Хотя класть SECRET_KEY в переменную окружения - тоже хорошая практика.
    Ответ написан
    Комментировать
  • Как в админ-панели Django вывести help_text отдельного поля модели при использовании формы TabularInline?

    vmm86
    @vmm86 Автор вопроса
    Software Developer
    Ограничился методом append в jQuery, добавляя к блоку с TabularInline-формой по её идентификатору необходимый текст, хранящийся в файле локализации.
    Ответ написан
    Комментировать
  • Как в Django правильно локализовать даты с месяцем в родительном падеже?

    vmm86
    @vmm86 Автор вопроса
    Software Developer
    Возможно, я ответил себе сам - использовать USE_L10N = False.
    Если у кого-то есть более подробные объяснения - буду рад их увидеть в ответах.
    Ответ написан
  • Как осуществить сортировку списка перетаскиванием в Джанго?

    vmm86
    @vmm86
    Software Developer
    Для сортировки перетаскиванием именно в админке есть плагин adminsortable2, но он не совсем адекватно работает - скрывает строку, на которой был делан клик мышью до момента перетаскивания и отпускания кнопки мыши, поэтому при малом числе строк менять их порядок становится неудобно, а то и ни невозможно.
    Ответ написан
    Комментировать
  • Как в Django скрыть поле в админке?

    vmm86
    @vmm86
    Software Developer
    Что входит в задачу "скрыть"?

    Не выводить поле при редактировании (явно не указывая его в списке выводимых полей или добавляя в список исключаемых) автоматически означает сделать его по умолчанию либо пустым (blank=True, null=True), либо автозаполняемым каким-либо дефолтным значением (default=...). Крайний вариант - переопределить метод save_model, если необходимо какое-то условное заполнение этого поля.

    Можно сделать поле нередактируемым, но отображаемым, добавив его в readonly_fields.
    Ответ написан
    Комментировать
  • Дефолтная картинка для ImageField?

    vmm86
    @vmm86
    Software Developer
    Можно указывать название самого дефолтного файла изображения в БД, а полный путь к нему либо конструировать во view или template с помощью os.path.join(), либо хранить его в параметре настроек проекта.
    Ответ написан
  • Django, как сделать скидку для товара?

    vmm86
    @vmm86
    Software Developer
    Скидки можно хранить в одной модели с товарами или в отдельной модели, если они могут вводиться независимо и не быть жёстко привязанными к конкретным моделям товаров. В любом случае принцип работы скидки похож на комиссию платёжной системы, но с обратным знаком - процент от цены либо вычитается из стоимости товара, либо добавляется к ней.

    Для работы как со скидками/комиссиями, так и собственно с ценами в бэкенде рекомендовал бы использовать тип Decimal с двумя фиксированными знаками после запятой, т.к. меньше чем с сотыми долями денежной единицы (копейками или центами) работать не придётся. Преобразование можно обернуть в функцию или метод класса, и потом везде его использовать.

    from decimal import Decimal
    
    def decimal_price(price):
        return Decimal(price).quantize(Decimal('0.00'))
    Ответ написан
    Комментировать
  • Как правильно реализовать конфигурации сайта заполняемые в админке Django?

    vmm86
    @vmm86
    Software Developer
    Зависит от архитектуры.

    Если на одном экземпляре проекта и одной БД работает один сайт и параметры нужны только для него - можно их хранить сразу в settings.py или в наследующем от него кастомном файле настроек.

    Если на одном экземпляре проекта и одной БД работают много сайтов - тогда логичнее завести в БД модель для хранения информации о сайтах, в том числе поле с настройками, скорее всего, в JSON. Редактировать в админке удобно с помощью django-jsoneditor - удобный JS-редактор, можно добавлять любые типы параметров в любой древовидной структуре.
    Ответ написан
    Комментировать
  • Как правильно локализовать дату/время в заданном часовом поясе в админке Django?

    vmm86
    @vmm86 Автор вопроса
    Software Developer
    Обходное решение подобной задачи (для всей админки, а не для форм редактирования отдельных моделей) - активировать часовой пояс выбранного сайта в админке, выбирая сайты из выпадающего списка. Тогда во всех связанных с выбранным сайтом моделях будут отображаться только данные этого сайта, его часовой пояс будет активирован и вывод даты/времени везде будет локальным.
    Но логично будет оставить в выпадающем списке и первый пункт по умолчанию "данные всех сайтов" для вывода без фильтрации. В этом случае часовой пояс нужно будет сбрасывать в дефолтный UTC, и в этом случае дата/время всё равно будет отображаться в UTC.
    Ответ написан
    Комментировать
  • Как сделать полный тулбар в CKEditor на Django?

    vmm86
    @vmm86
    Software Developer
    У меня в Django 1.11.1 и django-ckeditor 5.2.2 полный тулбар работал при указании конфига по умолчанию и значении full с маленькой буквы.

    CKEDITOR_CONFIGS = {
        'default': {
            'toolbar': 'full',
        },
    }
    Ответ написан
    Комментировать