Ответы пользователя по тегу Django
  • Как добавить поле в существующую модель Django?

    Tomio
    @Tomio
    backend developer (python, php)
    Извиняюсь за глупый вопрос, но вы после того, как сделали миграцию, вы её применили? Обычно в механике добавления нового поля для модели проблем быть не должно.
    А можете показать полный текст ошибки? Часто люди делают опечатки при обращении к атрибутам (вы могли случайно написать не model.chief, а model.chef, например)
    Ответ написан
    Комментировать
  • Как в Django сделать уникальные значения поля ForeignKey на основе записей в БД?

    Tomio
    @Tomio
    backend developer (python, php)
    Смотрите в сторону unique_together, validate_unique, либо переопределяйте метод save для проверки.
    Ответ написан
    Комментировать
  • Как избавиться от большого models.py?

    Tomio
    @Tomio
    backend developer (python, php)
    Чтобы избежать циклического импорта, используйте либо, как вы упомянули, apps.get_model(), либо импорт модуля целиком, а не конкретно моделей. То есть, не
    from somemodule.models import SomeModel,
    а
    import somemodule.models as somemodule_models
    и затем к модели обращайтесь в коде через
    somemodule_models.SomeModel.objects(...)...
    Ответ написан
    Комментировать
  • Как сделать итерировать объект другой модели после 2ух итерации первой итд?

    Tomio
    @Tomio
    backend developer (python, php)
    Например, так:
    banners = ['banner1', 'banner2', 'banner3']
    posts = ['post1', 'post2', 'post3', 'post4', 'post5', 'post6', 'post7', 'post8']
    banner_step = 2
    for index, post in enumerate(posts):
        print(post)
        if (index+1) % banner_step == 0 and banners:
            print(banners.pop(0))


    Вывод будет таким:
    post1
    post2
    banner1
    post3
    post4
    banner2
    post5
    post6
    banner3
    post7
    post8


    Только нужно учесть, что после каждой команды banners.pop(0) список banners будет уменьшаться. Если нужно сохранить исходный список, то необходимо будет сделать копию данного списка и уже в нём делать .pop(0)
    Ответ написан
    Комментировать
  • Как добавить список в БД через django?

    Tomio
    @Tomio
    backend developer (python, php)
    Если использовать джанговскую ORM, то всё делается через модель. Создаете, к примеру, модель PingResult, в которой будет поле ping_list с типом JSON, и туда потом сохраняете json со списком.
    Если бы была бд PostgreSQL, то в ней можно создавать поля с типом Array - как раз для списков.

    Если же ORM не использовать и нужно уже в готовую бд, в конкретную таблицу и поле положить данные, то используйте "сырой" запрос:
    from django.db import connection
    with connection.cursor() as cursor:
        cursor.execute('INSERT INTO sometable (somefield) VALUES (ping_list)');
    Ответ написан
    1 комментарий
  • Как автоматически привязать модель заказа к User?

    Tomio
    @Tomio
    backend developer (python, php)
    А зачем вам тут связь MAnyToMany? У вас разве у одного заказа может быть несколько пользователей?)
    Вам нужна простая связь OneToMany. В модели Order создаете поле account = fireld.ForeignKey(Account, related_name='accounts_order'), и в него будете записывать объект Account при заказе.
    Далее на странице профиля выводите account_obj.accounts_order.all()
    Ответ написан
    5 комментариев
  • Насколько углубленно нужно знать Пайтон, чтобы начать учить Джанго?

    Tomio
    @Tomio
    backend developer (python, php)
    Чтобы учить Джанго углублённых познаний в питоне не требуется. Вам достаточно будет каких-либо статей релевантных в интернете найти и почитать.
    Но чтобы писать на Джанго действительно качественные и производительные приложения, нужно мыслить по-другому. А для этого уже нужны глубокие познания в питоне =)
    Ответ написан
    Комментировать
  • Как получить уникальные значения из базы Django orm?

    Tomio
    @Tomio
    backend developer (python, php)
    ORM не будет работать без моделей. Если вам нужно обратиться к таблице, для которой не создана релевантная модель, то вам придется выполнить запрос напрямую к этой таблице.

    from typing import Any, Dict, List
    from django.db import connection
    
    with connection.cursor() as cursor:
        cursor.execute('SELECT DISTINCT category_name FROM some_table_name;')
        columns = [col[0] for col in cursor.description]
        rows: List[Dict[Any, Any]] = []
        row = cursor.fetchone()
        while row:
            rows.append(dict(zip(columns, row)))
            row = cursor.fetchone()
    print(rows)


    На выходе у вас будет список словарей, где один словарь - это одна строка таблицы с названием поля и его значением.
    Ответ написан
    Комментировать
  • Как получить url внутри views.py?

    Tomio
    @Tomio
    backend developer (python, php)
    Функция reverse()
    Ответ написан
    Комментировать
  • Сможет ли Django полностью заменить PHP?

    Tomio
    @Tomio
    backend developer (python, php)
    Django никогда не заменит PHP или какой-либо из его фреймворков или CMS, потому что это лишь инструмент, с помощью которого достигаются поставленные задачи. Это всё равно, что написать, заменит ли Symfony или Bitrix когда-нибудь Python, а то куда не посмотри, на серьезные проекты нужен симфони, а в сфере e-commerce подавляющее большинство сайтов сейчас ни битриксе.
    Всё взаимозаменяемо. Вы, как разработчик, должны понимать, какой инструмент сможет решить вашу задачу лучше и быстрее, и в каком инструменте вы лучше разбираетесь. Не тянитесь за трендами, прокачивайте навыки в том, что вам интересно, и где вы чувствуете себя как рыба в воде.
    Ответ написан
    Комментировать
  • Как при регистрации пользователя сделать объект?

    Tomio
    @Tomio
    backend developer (python, php)
    Это можно сделать с помощью сигналов. Изучите эту информацию и у вас всё получится.
    Ответ написан
  • Что значат volumes в конце docker-compose.yml?

    Tomio
    @Tomio
    backend developer (python, php)
    Блок volumes, определенный на первом уровне yaml файла (перед servies или после, это не важно) предназначен для указания общих для всех сервисов областей монтирования хранилищ.

    У вас указано:
    volumes:
      static_volume:

    Это значит, что у вас локально на диске будет создано хранилище для данных. А конкретно вот тут:
    /var/lib/docker/volumes/static_volume/_data
    И его смогут использовать те сервисы, которым вы его укажете.
    Ответ написан
    Комментировать
  • Не является внутренней командой?

    Tomio
    @Tomio
    backend developer (python, php)
    Вы в виртуальном окружении пробовали сделать то же самое? Если нет, то рекомендую всегда под проекты использовать виртуальное окружение, благо у питона это встроенная фича.
    Тут база - https://docs.python.org/3/library/venv.html
    Тут как активировать его в windows - https://tyapk.ru/blog/post/python-virtual-environm...
    Ответ написан
    3 комментария
  • Что это за конструкция: shop, _ = Shop.objects.get.... бла-бла-бла....?

    Tomio
    @Tomio
    backend developer (python, php)
    По-другому это называется "развернуть кортеж". То есть, в зависимости от того, сколько значений в кортеже
    t = ('one', 'two', 'three')
    можно их по порядку вынести в переменные
    a, _, b = t
    >> a
    >> 'one'
    >>_
    >>'two'
    >>b
    >>'three'

    Символ '_' тоже можно использовать в качестве переменной. Но по негласному соглашению им принято делать заглушки, если какое-то значение не нужно. Например, если перебираете словарь (ключ-знаение) и ключ вам не важен, то можно написать так
    for _, value in some_dict.items():
        pass
    Ответ написан
    2 комментария
  • Как происходит взаимодействие сайта и 1С: Предприятие?

    Tomio
    @Tomio
    backend developer (python, php)
    Вот тут ребята делятся опытом похожей интеграции
    Ответ написан
    Комментировать
  • Кто может дать мне задание для Pet-Project?

    Tomio
    @Tomio
    backend developer (python, php)
    Предлагаю вам реализовать игру "Морской бой". Заодно JS подтянете, и прощупаете общение фронта с бэком.
    Игра будет строиться на запросах и ответах (DRF в вашем случае).
    Сначала сверстаете игровое поле (HTML+CSS).
    В начале игры на поле 10*10 проставляете свои корабли (JS) и на бэке генерируется схема простановки кораблей противника (можно использовать Postgres, чтобы заносить расположение и хранить текущее состояние кораблей. Заодно при генерации схемы поработаете с алгоритмами, придумаете свои).
    Реализация данного проекта, если будете упорными и не забросите это дело, очень хорошо прокачает ваши навыки.
    Ответ написан
    Комментировать
  • Как правильно внести изменения в модель django?

    Tomio
    @Tomio
    backend developer (python, php)
    1. Вносите все необходимые правки в модель
    2. В консоли выполняете python manage.py makemigrations
    3. Локально или на удаленном сервере (после переноса миграции) выполняете в консоли python manage.py migrate
    Ответ написан
    1 комментарий
  • Как мне в django написать модель так чтобы комфортно работать с JSON?

    Tomio
    @Tomio
    backend developer (python, php)
    Ну в вашем случае всё достаточно просто. Но нужно в качестве БД использовать Postgres, так как в таком случае можно в джанго использовать поле ArrayField.

    class StartPlace(models.Model):
    
    	start_point = models.ArrayField(max_length=10)
    	icon = models.CharField(max_length=50)
    	url = models.ArrayField(max_length=10)
    
    class Point(models.Model):
    
    	end_place = models.ArrayField(max_length=10)
    	icon = models.CharField(max_length=50)
    	start_place = models.ManyToManyField(StartPlace)
    Ответ написан
    Комментировать
  • Почему Django views 'не видит' файлы в директории проекта?

    Tomio
    @Tomio
    backend developer (python, php)
    Попробуйте заменить относительный путь к папке
    p_s = './static/csv_s/as_is/'
    path_start = os.path.dirname(p_s)
    p_f = './static/csv_s/to_be/'
    path_finish = os.path.dirname(p_f)

    на абсолютный
    cur_dir = os.path.dirname(os.path.abspath(__file__))
    path_start = '{}/static/csv_s/as_is/'.format(cur_dir)
    path_finish = '{}/static/csv_s/to_be/'.format(cur_dir)
    Ответ написан
    1 комментарий
  • Как в Postman передать в POST запросе к Django Rest Framework текущего юзера?

    Tomio
    @Tomio
    backend developer (python, php)
    Непосредственно в постмане объект юзера никак не передать, но можно передать данные, по которым можно сделать выборку нужного пользователя (по его id, по email и пр.)
    В методе VendorsCreateView.post получите эти данные из request и сделайте поиск пользователя в базе, если он найдется, то сохраните его в переменную (например, user_object_from_db) и передайте этот объект пользователя сюда - vendor_serializer.save(user_id=user_object_from_db)
    Ответ написан
    1 комментарий