• Как превратить QuerySet в JSON?

    @DoomAndGloom
    1. На самом деле тебе нужен не JSON, а словарь. Не стоит путать эти штуки :) JSON -- это строка, отформатированная в таком виде, что она очень похожа на питоновский словарь. Он используется не только в Python, а много где ещё.

    2. Если хочется найти ответ, то для гуглежа пригодится слово "сериализация" (eng. "serialize"), это примерно то, что тебе нужно.

    Обычно для этого используют DRF, вот туториал по сериализации в нём

    Результат будет примерно такой:

    from rest_framework import serializers
    
    class TireSerializer(serializers.ModelSerializer):
        class Meta:
            model = Tire
            fields = ["en_mm", "height", "diametr", "season", "cartype"]
    
    def post(self, request):
        fields = ["en_mm", "height", "diametr", "season", "cartype"]
        qs = TireModel.objects.all()
        for field in fields:
            if request.POST.get(field) != "" and request.POST.get(field) != "All":
                qs = qs.filter(**{field: request.POST.get(field)})
        serializer = TireSerializer(qs, many=True)
        print(serializer.data)


    3. Если смущает, что выводит <QuerySet []>, то дело в заполненности БД: попросту не нашлось ни одного Tire, чтобы он соответствовал всем применённым фильтрам.

    4. Можно обойтись без DRF, например, вот что предлагает Django из коробки, либо сделать всё просто руками:

    from rest_framework import serializers
    
    def serialize_tires(tires):
        return [
            {"en_mm": tire.en_mm,
             "height": tire.height,
             "diametr": tire.diametr,
             "season": tire.season,
             "cartype": tire.cartype} for tire in tires]
    
    def post(self, request):
        fields = ["en_mm", "height", "diametr", "season", "cartype"]
        qs = TireModel.objects.all()
        for field in fields:
            if request.POST.get(field) != "" and request.POST.get(field) != "All":
                qs = qs.filter(**{field: request.POST.get(field)})
        print(serialize_tires(tires))


    Такой способ подойдёт, если сериализации в проекте будет не очень много, чтобы не тащить ещё один фреймворк в проект ради пары строк кода. Но если это планируется использовать повсеместно в проекте -- лучше взять DRF.
    Ответ написан
    2 комментария
  • Не могу удалённо подключиться к PostgreSQL?

    @Hanneman
    password authentication failed for user "hostman" ни о чём не говорит?
    Либо пароль неправильный, либо такой пользователь не имеет привилегий подключения с другого (удалённого) хоста - это надо настроить для этого конкретного пользователя. Переписывать не буду, смотрите в руководстве.
    Ответ написан
    Комментировать
  • Проблема в psycopg2?

    ScriptKiddo
    @ScriptKiddo
    Проблема в том, что предыдущий запрос завершился с ошибкой и транзакцию необходимо откатить, либо использовать конструкцию с with, тогда при ошибке откат транзакции выполнится автоматически

    https://www.psycopg.org/docs/connection.html#conne...

    conn = psycopg2.connect(DSN)
    
    with conn:
        with conn.cursor() as curs:
            curs.execute(SQL1)
    
    conn.close()
    Ответ написан
    1 комментарий