【问题标题】:How to return all data in database as Json?如何将数据库中的所有数据作为 Json 返回?
【发布时间】:2020-04-22 07:06:27
【问题描述】:

如何将数据库中的所有数据作为 Json 返回? 模型.py:

class Hero(models.Model):
    Hero_id = models.IntegerField(auto_created=True, primary_key=True, serialize=False, verbose_name='Hero_id')
    race = models.CharField(max_length=50, blank=True)
    age = models.IntegerField(blank=True)
    class_= models.CharField(max_length=50, blank=True)

Views.py:

class HeroSerializer(serializers.ModelSerializer):
    class Meta:
        model = Hero
        fields = ['Hero_id', 'race', 'age', 'class_']
        extra_kwargs = {
                'race': {
                    'required': False,
                    'allow_null':True
                 },
                'age': {
                    'required': False,
                    'allow_null':True
                 },
                'class_': {
                    'required': False,
                    'allow_null':True
                 }
            }
def HHH():
    h=Hero.objects.all()
    serializer= HeroSerializer(h)
    return JsonResponse(serializer.data)

但它返回一个错误: 尝试获取序列化程序 HeroSerializer 上的字段 Hero_id 的值时出现 AttributeError。序列化器字段可能命名不正确,并且与 str 实例上的任何属性或键都不匹配。原始异常文本是:“str”对象没有属性“Hero_id”。 有什么想法吗?

【问题讨论】:

  • 用您的英雄模型代码更新您的问题

标签: python json django database rest


【解决方案1】:

因为你要序列化一堆实例,你需要将many=True 传递给序列化器:

def HHH():
    h=Hero.objects.all()
    serializer= HeroSerializer(h, many=True)
    return JsonResponse(serializer.data, safe=False)

查看documentation 提供的示例。此外,字段名称class_ 至少在 Django 2.x 中无效,您将收到错误消息:

ERRORS:
core.Hero.class_: (fields.E001) Field names must not end with an underscore.

要渲染到模板中(假设配置正确),您可以使用render 函数,例如

views.py

from django.shortcuts import render

def HHH():
    heros = Hero.objects.all()
    serializer = HeroSerializer(heros, many=True)
    return render(request, 'index.html', {'heros': serializer.data})

index.html

{% for hero in heros %}
    <p>{{ hero.age }}</p>
{% endfor %}

【讨论】:

  • 它返回 Ordered dict 但我需要简单的字典。如何转换?
  • 您可以使用 dict 构造函数转换为原版 dict,例如dict(ordered_dict),但我不知道为什么需要这个。
  • 现在返回:字典更新序列元素#0的长度为4; 2 是必需的。在其他功能中,我需要以 html 形式传递 Json:return render(request, "1.html", {"Hero":serializer.data})
  • json.dumps(serializer.data)
  • 谢谢!但最后一个问题。如上所述,如何在 html 中传递它?
猜你喜欢
  • 2021-01-01
  • 1970-01-01
  • 2019-04-14
  • 2017-06-03
  • 2017-11-15
  • 2023-04-03
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多