Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (2)

Лучшие ответы пользователя

Все ответы (2)
  • В чем отличие static и media файлов?

    @DoomAndGloom
    Ты прав. Статика -- это код. Медиа -- это данные.

    Если картинка -- это бекграунд, то это часть кода, часть поставки от программиста к заказчику. То есть тогда это static.

    Если картинка -- это аватарка пользователя, которую загрузил пользователь твоего сайта, то тогда это media, ведь это пользовательские данные, а не часть кода. Сайт от программиста заказчику может быть поставлен без media, и заказчик своими силами/с помощью менеджеров/пользователей сам заполнит всю media так, как ему надо.

    Статья на эту тему.
    Ответ написан
    Комментировать
  • Как превратить 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 комментария