【问题标题】:How to get json from queryset?如何从查询集中获取 json?
【发布时间】:2019-11-18 15:25:52
【问题描述】:

这个类有数据库查询:

class arizakestirimi_func(ListAPIView):

    serializer_class = arizakestirimiserializer
    def get_queryset(self):
        queryset = isyeriarizabilgileri.objects.raw("""
            SELECT
            M.id as id,M.isyeri as isyeri,
            DATE_PART('day',(M.tarih)::timestamp - (D.mindate)::timestamp) * 24 +
            DATE_PART('hour',(M.tarih)::timestamp - (D.mindate)::timestamp) +
            DATE_PART('minute',(M.tarih)::timestamp - (D.mindate)::timestamp) / 60 as zamanfarki
            FROM arizakestirimi_isyeriarizabilgileri M
            INNER JOIN
            (SELECT DISTINCT ON (isyeri) isyeri,id as id,durustahmini,tarih as mindate
         FROM arizakestirimi_isyeriarizabilgileri 
         WHERE durustahmini='MEKANIK ARIZA' AND isyeri='15400001'
         ORDER BY isyeri, tarih ASC) D
            ON M.isyeri = D.isyeri AND M.durustahmini = D.durustahmini
            ORDER BY M.tarih ASC

          """)
        return queryset

这是序列化器类,我在serializer.py中定义了它:

class arizakestirimiserializer(serializers.Serializer):

    isyeri = serializers.CharField(max_length=30)
    zamanfarki= serializers.FloatField()

当我使用 django rest 框架时,我得到了这个 json:

[
    {
        "isyeri": "15400001",
        "zamanfarki": 0.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 7.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 603.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 607.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 1655.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 1661.0
    }
]

我想在“get_queryset”方法中直接使用这个 json。如何将查询集结果转换​​为具有给定字段名称的 json,例如“serializers.py”。 谢谢

【问题讨论】:

  • 只是出于好奇,为什么在 get_queryset 方法中需要 JSON?

标签: django django-rest-framework


【解决方案1】:

要在 get_queryset 方法中获取 JSON,您可以这样编辑代码:

class arizakestirimi_func(ListAPIView):

serializer_class = arizakestirimiserializer

def get_queryset(self):
    queryset = isyeriarizabilgileri.objects.raw("""
        YOUR QUERY
      """)

    data = self.serializer_class(queryset, many=True).data # This will give you the JSON data

    return queryset

【讨论】:

  • 首先感谢@Mehak。但是我收到了这个错误。“尝试在序列化程序arizakestirimiserializer 上获取字段isyeri 的值时出现属性错误。序列化程序字段可能命名不正确,并且与RawQuerySet 实例上的任何属性或键都不匹配。原始异常文本是:'RawQuerySet' 对象没有属性 'isyeri'。"
  • 我检查了我的类似代码,添加many=True 似乎有效。我已经更新了答案。请试一试。
猜你喜欢
  • 2013-02-01
  • 2015-02-05
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2019-05-02
  • 2020-07-31
  • 1970-01-01
相关资源
最近更新 更多