Ответы пользователя по тегу Django
  • Как установить нужный timezone для datetime?

    ur001
    @ur001
    Программист. Искатель. Сноб. Социальный ассоциатор
    Для получения текущего времени с временной зоной (локализованное время) нужно использовать now() не из datetime, а из django.utils.timezone:

    from django.utils.timezone import now

    Чтобы преобразовать уже локализованный datetime в другую временную зону (например во временную зону пользователя):

    from django.utils.timezone import now, pytz
    user_timezone = pytz.timezone(user.timezone or settings.TIME_ZONE)
    now().astimezone(user_timezone)

    Если у вас нелокализованный datetime и вы хотите добавить ему информацию о временной зоне:

    from datetime import datetime
    from django.utils.timezone import pytz
    user_timezone = pytz.timezone(user.timezone or settings.TIME_ZONE)
    user_timezone.localize(now())

    Для того, чтобы Djagno использовало временные зоны для полей Date/Datetime нужно, они должны быть включены в настройках:

    TIME_ZONE = 'Europe/Moscow'
    USE_TZ = True
    Ответ написан
  • Как избавитсья от лишних запросов в Django?

    ur001
    @ur001
    Программист. Искатель. Сноб. Социальный ассоциатор
    Почти на всех больших проектах мне удавалось избегать использования .raw(), по этому я спросил вас, что там внутри. Почти наверняка есть обходные пути.

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

    object_list = list(MyModel.objects.raw(...))

    Для выполнения prefetch_related в raw запросах обычно используют prefetch_related_objects, хотя эта функция в Django не документирована:

    from django.db.models.query import prefetch_related_objects
    object_list = list(MyModel.objects.raw(...))
    prefetch_related_objects(raw_qs, ['fk_field', 'another_fk_field', ...])


    Для изучения когда и какие запросы выполняются удобно пользоваться консолью debugsqlshell из django debug toolbar (которую вы скорее всего используете).
    Ответ написан
  • Haystack + Solr: откуда взять шаблон для нового ядра?

    ur001
    @ur001 Автор вопроса
    Программист. Искатель. Сноб. Социальный ассоциатор
    Никто не отвечает. Тогда отвечу сам. Не используйте Solr, используйте ElasticSearch. Это тот же Lucene, но в гораздо более приятной обёртке:

    1) Не требует установки JRE/Jetty/Tomcat, запускается собственным бинарником
    2) Конфигурируется через yaml/json вместо уродского XML
    3) Не требует схемы и перезагрузки при её изменении!
    4) Не нуждается ни в каких ядрах, при этом спокойно поддерживает множество индексов

    А вот целый сайт по сравнению Solr vs. ElasticSearch
    Ответ написан