• Как избавиться от ошибки 1064 You have an error in your SQL syntax?

    @marazmiki
    Укротитель питонов
    Думаю, дело обстоит так: проект был создан относительно давно, а Вы пытаетесь его актуализировать и обновлять зависимости. С кодовой базой сложностей нет, а вот cleardb, похоже, застрял в прошлом и работает на основе древнего mysql 5.5, поддержку из которого выпилили то ли в версии 2.0, то ли 2.1 Джанги. Отсюда и непонятки: джанга генерирует современный SQL, который старый Мускуль не в состоянии распарсить.

    Проще всего именно эту ошибку исправить, заманкипатчив джангу в момент запуска проекта :
    # settings.py
    
    from django.db.backends.mysql.base import DatabaseWrapper
    
    DatabaseWrapper.data_types['DateTimeField'] = 'datetime'
    Но надо понимать, что это всего лишь костыль, чтобы быстро запуститься. Поэтому потом всё же лучше актуализировать движок базы.
    Ответ написан
    6 комментариев
  • Как передать несколько json списков в Django?

    @kova1ev
    Знаком с джанго очень поверхностно, я в такой ситуации мастерил из квери сета объекты вручную, как то так:

    from django.http import JsonResponse
    from .models import User
    
    def users(request):
        users = User.objects.all()
        output = []
        for elem in users:
            output.append(
                {"name": elem.name, "adress": elem.adress, "age": elem.age})
        return JsonResponse(output, safe=False)


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

    def filter(request):
        if request.GET:
            filter = request.GET.get('filter')
            decoded_filter = json.loads(filter)  # из строки инициализирует объект
            stations = Station.objects.all()
    
            stations_out = []
            for elem in stations:
                stations_out.append({.......}) #создаем нужный объект
    
            id_net = Net.objects.filter(name=decoded_filter["net"])
            list_id_stations = Networkstations.objects.filter(idnet__in=id_net).values_list("idstation", flat=True)
            list_name_net = []
            if decoded_filter["net"] != 'all':
                stations = stations.filter(id__in=list_id_stations)
            if decoded_filter["type"] != 'all':
                stations = stations.filter(type=decoded_filter["type"])
            for station in stations:
                list_name_net.append(
                    list(Networkstations.objects.filter(idstation=station.id).values('idnet__name')))
            ctx = {
                'stations': stations_out,
                'list_name_net': list_name_net,
            }
        return JsonResponse(ctx, safe=False)


    Конечно, если в таблице будет дофига полей, такой способ не очень удобен, подпишусь чтобы узнать правильный ответ.

    Или юзать django rest framework можно, там все это удобно сделано.
    Ответ написан
    3 комментария
  • Почему не подхватывается изображение в Django?

    @marazmiki
    Укротитель питонов
    Ребята в общем-то всё правильно сказали о раздаче статики. Я бы хотел дополнить топик ещё одним решением, которое мне нравится больше. Заключается оно в использовании wsgi-миддльвари dj-static.

    Чтобы подключить статику, нужно дописать в wsgi.py проекта
    from django.core.wsgi import get_wsgi_application
    from dj_static import Cling, MediaCling
    
    application = Cling(MediaCling(get_wsgi_application()))

    и всё. Править urls.py не надо.

    Очевидные плюсы — этой штукой можно раздавать статику даже в продакшн-окружении. Те, кто размещал джанго-проекты на хостинге heroku, так и поступают. И, как упоминалось выше, не нужно вносить дополнительные девелоперские url-схемы в urls.py.

    Очевидные минусы — дополнительная зависимость (хотя разве ж это минус?). Ставится через pip:

    $ pip install dj-static
    Ответ написан
    1 комментарий