Ответы пользователя по тегу Django
  • Как добавить значение к полю models.form django?

    @rodion4dev
    Решение: поля сделать необязательными, переопределить ModelMultipleChoiceField, сделать свою реализацию метода to_python(), и, если метод родителя вернул пустой список, - при переопределении вернуть list(QuerySet.all()) нужного объекта. Должно сработать.
    Ответ написан
    Комментировать
  • Как в контексте синхронной джанги заставить channels отправлять сообщения в реальном времени?

    @rodion4dev
    Привет

    Ответ на основной вопрос - да, можно. Но придётся понять для себя как работает эта связка Django + Channels, чтобы данные по каналу с сервера отправлялись асинхронно.

    Если вкратце: подключить channels_redis, в своём Consumer'е реализовать метод-обработчик, который будет получать извне данные и отправлять их в действующий websocket канал, и реализовать постоянно-работающую службу (в зависимости от того как вы отправляемые данные подготавливаете; например, celery worker), которая, подготовив данные, отправит их через group_send(), который, в свою очередь, положит данные в Redis, а Consumer, с обратной стороны, вытащит их и передаст в тот самый метод-обработчик.

    Сперва голова кругом от такой логики, но всё очень продуманно и нужно только время на понимание процессов.
    Ответ написан
    1 комментарий
  • Наилучшая структура Django-проекта?

    @rodion4dev
    Отвечая на вопрос, увы, таковой нету. Вы должны сами для себя решить и не спустя три месяца.

    Но если желаете более предметно, то вот Вам мои ощущения по поводу Вашей структуры, к которой вы пришли...

    Первое, что бросается в глаза - настройки. Да, Вы следуете идеологии Django, которая неявно шепчет всем нам как их компоновать: но это небезопасно. Почему в настройках у вас модули, два из которых отражает какое-то окружение (разработка, боевое и что-то общее между тем и тем)? Исходя из Вашей структуры сразу витает в воздухе вопрос: "А почему настройки боевого окружения вдруг должны быть в репозитории? А как быть с секретным ключом? А безопасно ли это?". Следующий логичный вопрос удобства: почему я, как разработчик, вдруг должен заставлять своих DevOps'ов компоновать и поддерживать за меня настройки в виде файлов (модулей)? Это ведь исполняемый файл и там бесчисленное количество возможностей; более того, это не безопасно. Сейчас бОльшая часть проектов поднимается средствами docker-compose, куберов и прочих прелестей: дико неудобно собирать и поддерживать настройки в виде файлов для каждого запускаемого контейнера (у нас ведь есть переменные окружения). Надеюсь, здесь понятен основной посыл: безопасность и удобство использования.

    (здесь я не сразу понял, что это именно проект, а не приложение; подробности в комментариях)
    Едем дальше - core. Почему именно такое название? Понятное дело, ядро, Django в своих исходниках делает и всё такое... Но зайдя в такой проект, сразу ли будет понятно за что отвечает это приложение? Нет. В общем-то даже в документации к Django в quick start название приложения опирается на её главную бизнес-потребность.

    Переходим к следующему: папка apps с приложениями. Для начала вроде всё удобно и логично: есть ядро проекта, а есть дополнения к нему а значит их нужно как-то отделить от этого ядра. А что делать если ядро будет всегда одно в проекте? А что делать если дополнительных приложений будет всего одно? А зачем тогда ему целая папка (приложению) если само приложение - и есть папка (или модуль в нашем случае)? Так оставлять или менять уровень вложенности? На самом деле что core, что appN - являются такими же Django приложениями (одинаковыми), а значит и уровень абстракции у них - один; один уровень абстракции говорит нам о том, что и appN нужно класть где-то рядом с core (здесь должно быть другое название как и писал). Часто я вижу в проектах, что core так и остаётся одой единственной core папкой без дальнейшей расширяемости. Вывод - преждевременная оптимизация - вещь нелогичная по сути своей.

    Папка template. Здесь я всегда доверяюсь Django и кладу шаблоны в папку приложения (делая ещё две папки - templates, а в ней - папку с названием приложения). Здесь, думаю, подойдёт правило класть то, что используется, ближе к тому месту, где это используется (но с поправкой на рекоммендации оф. документации Django).

    Папка static. В среде отладки её быть в принципе быть не должно; обычно вся статика всегда в первую очередь связана с приложением, куда мы её и стараемся класть (как с папкой templates), что является и советом из Django документации.

    Папка models. Вынося её куда-то в отличное от папки приложения место, мы сразу же забиваем на автономность самого приложения; приложение сразу же становится зависимым от внешнего кода (чего нужно избегать). Обычно каждое приложение имеет свои модели и не зависит от моделей другого приложения.

    venv. Актуально только на компьютере каждого разработчика; по-моему это неудачное решение класть платформо-зависимые файлы под контроль версий.
    Ответ написан
    5 комментариев
  • Откуда взялось ключевое слово "category"?

    @rodion4dev
    c, created = Category.objects.get_or_create(category=row[7])


    Именно отсюда (см. выше) и берётся ключевое слово category. Скорее всего Вам нужно вот так: Category.objects.get_or_create(name=row[7])
    Ответ написан
    Комментировать
  • Как прописать соглашение на отправку почтовых уведомлений (django)?

    @rodion4dev
    Как вариант - добавить ещё одно поле BooleanField модели User с названием has_agree_to_receive_notifications и добавить это поле в список fields
    Ответ написан
  • Django - где найти пример кода для приложения вопросника (тестирование учеников)?

    @rodion4dev
    Такого примера, скорее всего, Вы не найдёте. Но можно пройтись по официальному руководству (шаг за шагом): не вопросник, конечно, но зато опросник :)
    Ответ написан
  • Что делать, если не открывается django admin панель на heroku?

    @rodion4dev
    Бывает :)

    http://www.shirman.gq/admin/

    Ошибку надеюсь сможете заметить :)
    Ответ написан
    2 комментария
  • Из за чего возникает ошибка с uuid?

    @rodion4dev
    Привет

    С таким количеством данных трудно решить проблему. Скорее всего дело либо в отсутствии миграций, либо в недостаточной кастомизации админки под новую модель.
    Ответ написан
  • TestCase, Cache или как написать тест для проверки кэша?

    @rodion4dev
    Реализация кеширования - часть Django фреймворка; по-моему, нет никакой необходимости тестировать то, что не написано Вами :)
    Ответ написан
  • Какой вид тестов использовать?

    @rodion4dev
    Всё зависит от того, какое тестирование Вы решили изучать. Если не можете определиться - предлагаю Вам узнать для начала о способах тестирования, хотя бы в общих чертах.

    Обычно начинают с модульного тестирования (unit-test) и в Django есть вспомогательные инструменты для этого (чего нет - можно найти в стандартной библиотеке unittest в python).
    Ответ написан
    Комментировать
  • Как исправить неверный вывод request.user в django?

    @rodion4dev
    Наверное, всё дело в том, что у Вас не передопределена настройка AUTH_USER_MODEL. Предлагаю покопать в этом направлении, поскольку, если мне память не изменяет, в объект запроса пользователь попадает на основе именно той настройки.
    Ответ написан
  • Как передать django переменную в атрибут формы action?

    @rodion4dev
    Есть два способа положить в action какой-то url:
    1. (в данном случае проще) Определить этот URL со стороны представления (с учётом условностей) и положить его в контекст шаблона (как Вы и сделали). В шаблоне его можно использовать напрямую без конструкций вида (как у Вас):
    <form action="{% url '{{ page }}' %}"><form>

    то есть вот так (будет правильным):
    <form action="{{ page }}"><form>

    2. Учесть эти условности внутри самого шаблона с помощью тегов и конструкций, определив переменную нужным URL'ом и как и в первом варианте положить его в атрибут action.

    Предлагаю Вам почитать это :)
    Ответ написан
  • Передача аргумента из шаблона в представление?

    @rodion4dev
    Наверное если только использовать такой способ. Поменять местами section/ и contacts/ и последний сделать необязательным:
    urlpatterns = [
        re_path(r'contacts/(?P<section>\w+)/', views.contacts),
    ]
    
    def contacts(request, section=''):
        ...
        return render(request, 'contacts.html', context)
    Ответ написан
    1 комментарий
  • Ошибка при выполнение команды django-admin startproject?

    @rodion4dev
    django-admin.py находится вне переменной окружения PATH. Предлагаю почитать эту статью (внимательно).
    Ответ написан
    Комментировать