Ответы пользователя по тегу Django
  • Как сделать селект, который определяет содержимое другого селекта'а?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Если именно Django + Admin, то по сути вот тут разбирали Django 2.х Admin. Как сделать выборку одного поля, в зависимости от выбранного элемента в другом (ForeignKey)?
    Там несколько решений, но скорее всего JS.
    Ответ написан
    Комментировать
  • Что лучше/правильнее применять для создания View generic.ListView и подобные или функцию render?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Применяйте то, что вы умеете.
    1. Class Based Views - кому-то они удобнее, какие-то вещи с ними удобнее
    2. Function Based Views - по сути стандарт, каких-то ограничений они не накладывают на возможности
    3. ListView и т.п. - по ним в интернет мало подсказок и готовых решений, их скорее всего вам надо будет изучить по официальной документации и покопавшись у них в исходниках

    Трёдоемкость реализации п.1 или п.2 я бы оценил как равную, а вот п.3 возможно чуть выше (но это только для меня, т.к. надо копаться в них).
    Ответ написан
    Комментировать
  • Как загружать большие данные через api?

    @Sovetnikov
    технический директор pulsprodaj.ru
    1. Про нехватку памяти проверьте сначала, запутить скрипт и в консоле запустите top - наблюдайте как растёт память.
    2. Если у вас 5млн записей, то вы принципиально неправильно сделали работу. Вы зачитываете в память сразу всё, хотя ваша единичная операция требует всего одного продукта.
    Пишите код правильно, а не делайте костыли, которые восстанавливают работу после того как что-то у вас отвалилось.
    3. Вы поулчаете данные по 1000 позиций в connect ... встройте туда же вашу обработку для Product, тупо копипастом хотя бы - это решит проблемы с памятью, если проблема именно в этом.
    Обрбатывайте по 1000 позиций за раз.

    Ещё поясню:
    - когда заканчивается память - это нештатная ситуация для всей системы и для СУБД в первую очередь, есть вероятность потерять данные
    - сохранять состояние offset для client.service.doGetItemsList тоже хорошая идея для случаев обрыва связи, но это только если она у вас рвётся
    Ответ написан
    1 комментарий
  • Django 2.х Admin. Как сделать выборку одного поля, в зависимости от выбранного элемента в другом (ForeignKey)?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Из коробки django-admin не поддерживает такие обновления на самой странице, только если в форме зададите свой queryset для поля которое соответствует FK из модели, но вы видимо хотите сделать именно на странице.

    Если у вас рядом на форме два FK поля, то пишите JS, который будет фильтровать второй в зависимости от значения первого. Только вам надо будет дополнительно на страницу в JS передать данные о связях второго FK с первым, чтобы фильтровать.

    А где у вас в модели страна с курортом связана?
    Вы же страну для Tours выбирать хотите?
    Ответ написан
    4 комментария
  • Подключиться к сокет соединению с ssl?

    @Sovetnikov
    технический директор pulsprodaj.ru
    1. Посмотрите браузером куда вас веб-сервер редиректит по 301 статусу.

    2. Вы соединяетесь с сокет сервером на 8060 порт ... а он поддерживает обращения по пути '/ws'? Не вижу его в routes.
    Вы же на domain:8060/ws соединение делаете, а не в nginx который обрабатывает "location /ws/" с пересылкой на 8060 порт.
    Ответ написан
    4 комментария
  • Каким образом можно вывести значение python функции в html файл?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Django micro-framework, web.py:
    from django.conf import settings
    from django.conf.urls import patterns
    
    if not settings.configured:
        settings.configure(
            DEBUG=True,
            ROOT_URLCONF='web',
            TEMPLATE_DIRS=['.'],
        )
    
    urlpatterns = patterns('',
                           (r'^$', 'web.index'),
                           (r'^show_data/$', 'web.show_data'),
                           )
    
    from django.shortcuts import render
    
    
    def index(request):
        return render(request, 'index.html', {})
    
    
    def show_data(request):
        from pay import get_data
        return render(request, 'show_data.html', {'data': get_data()})
    
    
    if __name__ == '__main__':
        from django.core.management import execute_from_command_line
    
        execute_from_command_line()
    Ответ написан
  • Стоит ли прикручивать websokets или асинхронность?

    @Sovetnikov
    технический директор pulsprodaj.ru
    websokets это для двусторонней коммуникации, не надо туда файлы запихивать (ну только если очень хорошо понимаете зачем).
    Так же файлы не надо запихивать в реляционную СУБД :)

    Единственное ... "здесь обработка файла в очереди (RabbitMQ)" это вы сообщение в очередь кидаете или какой-то код обработки менно в perform_create работает?
    Ответ написан
    3 комментария
  • Как получить поле объектов из inlines Django?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Если при изменении статуса заказа надо отправить оповещение пользователям, то save_model в ModelAdmin это не самое лучше место, вернее даже худшее из приходяших на ум.
    Статус заказа может быть изменен и в других местах ... (до уровня тригеров в БД опускаться не будем).

    Используйте post_save сигнал. Только неудобство, что надо будет вручную определять изменился ли статус, на тостере было про это.

    Если уж хотите в save_model, то учитывайте что Order изменится в БД только когда транзакция закомитится (а вы уверены что у вас транзакции нет?) Соответственно:
    from django.db import connection
    connection.on_commit(lambda: send_order_email(obj.pk))

    И в send_order_email зачитывайте заказ и БД ...
    Если хотите ускорить работу send_order_email в некоторых случаях и иметь возможность передать ему уже загруженный order с prefetch_related например, то сделайте просто:
    def send_order_email(order):
       if not isinstance(order, Order):
            order = Order.objects.get(pk=order)
    Ответ написан
    Комментировать
  • Как отследить изменение в поле админки?

    @Sovetnikov
    технический директор pulsprodaj.ru
    1. В Django 1.8 в модели можно переопределить статичный метод from_db, который вызывается когда модель загружена из БД.
    В этот момент сохранять начальное значение свойства.
    2. До Django 1.8 начальное значение можно получать в __init__ модели.
    3. Зачитывать в pre_save сигнале объект из БД и делать сравнение с тем что у вас есть, но в БД тутп оявляется лишний запрос...

    Ешё учитывайте, что между тем как вы загрузили объект из БД и начинаете его сохранять, в БД его могли уже изменить ... п.3 с этим справится.
    Ответ написан
    Комментировать
  • Как исправить ошибку в multiprocessing'e?

    @Sovetnikov
    технический директор pulsprodaj.ru
    1. Ставьте брейкпойнт в "c:\users\vik\appdata\local\programs\python\python36-32\Lib\multiprocessing\reduction.py", line 51, in dumps и ждите когда там появится TextIOWrapper и увидите суть проблемы
    2. Суть проблемы в том, что multiprocessing не может что-то сериализовать для передачи в другой процесс, мне кажется вы сильно сократили ваш принципиальный код и проблема где-то в передаваемых данных между процессами.
    3. Удостоверьтесь, что map может принимать в качестве func метод объекта ... в Python2 это не работало, в Python3 не пробовал.
    Ответ написан
    Комментировать
  • Где найти ментора (django)?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Сделайте простой сайт:
    1. Вверху поле ввода комментария
    2. Ниже показаны все ранее введенные комментарии с датой и временем создания
    3. Сделайте возможность редактирования комментариев на странице (например через https://github.com/django-inplaceedit/django-inpla...

    Дальше поднимите ДЕМО-интеренет магазин на https://github.com/awesto/django-shop или oscarcommerce.com
    Ну и дальше много всего интересного ...
    Ответ написан
    Комментировать
  • Django. Есть ли встроенный механизм пред-сохранения данных перед сохранением модели?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Я так понимаю вам надо:
    1. Показать форму заявки незарегестрированному пользователю
    2. Принять заявку через форму у этого пользователя и направить на страницу регистрации
    3. После того как пользователь зарегестрировался, создать для него заявку в системе от его имени
    Так?

    1. Делайте сущность "ПредварительнаяЗаявка" аналогично вашей заявке и сохраняйте её в базу когда пользователь без авторизации её создаёт, зачем redis? Или вообще признак у заявки сделайте "Предварительная" и без привязки к пользователю её создавайте.
    2. Далее после создания предварительной заявки, сохраняете идентификатор созданной предварительной заявки в сессию неавторизованного пользователя.
    3. Как зарегестрировался пользователь, делаете из его предварительной заявки нормальную, её идентификатор будет в данных сессии пользователя.

    Всё просто.
    Ответ написан
    Комментировать
  • Как подобрать и использовать прокси, если ключевой приоритет кол-во запросов в минуту?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Покажите биржу и покажите какие данные надо собирать.
    В Веб-интерфейсе как часто данные обновляются? Можно снимать их, если они обновляются чаще чем API позволяет их забирать.

    В своё время намучался с использованием прокси в Python ... SocksiPy наиболее внятное решение, но их несколько версий и уже не помню какую брал, да и то пришлось дорабатывать, если надо пишите, дам свою версию проверенную.
    Ответ написан
  • Как сделать поле суммы в модельке Django кастомизируемым?

    @Sovetnikov
    технический директор pulsprodaj.ru
    1. Сделайте страницу которая будет делать OrderItem.objects.filter(pk=order_item_id).update(total=33)
    2. Переопределите у своего ModelAdmin save_model, примерно так (я не тестировал этот код):
    def save_model(self, request, obj, form, change):
        if 'total' in form.changed_data:
            # В OrderItem.save обработайте параметр update_total
            obj.save(update_total=False)
        else:
            obj.save(update_total=True)

    Тут проблемы могут возникнуть в зависимости от сложности вашего ModelAdmin, думаю при наличии inline может что-то пойти не так ...
    3. Можно сделать надёжно и тупо:
    def save_model(self, request, obj, form, change):
        if 'total' in form.changed_data:
            custom_total = obj.total
            super().save_model(request, obj, form, change)
            OrderItem.objects.filter(pk=obj.pk).update(total=custom_total)
        else:
            super().save_model(request, obj, form, change)
    Ответ написан
  • Как правильно интегрировать Django с унаследованной базой данных?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Ошибка сообщает о том, что таблицу с указанным названием создать нельзя - она уже есть в базе.
    Если коротко, то вам надо сделать manage.py migrate --fake [appname] (appname - название вашего модуля), Django пометит в БД начальную миграцию как выполненную и саму базу трогать не будет.

    Но, т.к. django использует служебные таблицы, то сначала сделайте manage.py migrate django.

    По п.1 и 2 - попробуйте на практике. Я так понимаю модифицировать схему через Django вы не собираетесь? Тогда просто попробуйте, что Django умеет читать и писать в вашу БД. Нагенерируйте данных https://github.com/vandersonmota/model_mommy и прочитайте их.

    Ещё раз - учтите, что Django создаёт кучку служебных таблиц.
    Ответ написан
    6 комментариев
  • Python Django, как разбить все новости на части?

    @Sovetnikov
    технический директор pulsprodaj.ru
    Вместо "[12:]" надо "[:12]", вернее даже "[12:12]", если нужна вторая страница, но вообще где параметр номера страницы?
    Ответ написан