【问题标题】:Django Rest Framework serializer representation not workingDjango Rest Framework 序列化程序表示不起作用
【发布时间】:2015-02-27 01:03:30
【问题描述】:

我正在关注 Django Rest Framework tutorial on serializers,但发现了一些不寻常的行为。 print repr(serializer_instance) 显然应该打印有用的检查,我只能取回这个表示:

<snippets.serializers.SnippetSerializer object at 0x10220f110>. 

My code 似乎与教程中的完全一致,我使用的是 Django 1.7 和 Python 2.7。有谁知道为什么会发生这种情况?

sn-ps/serializers.py:

from django.forms import widgets
from rest_framework import serializers
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES

class SnippetSerializer(serializers.ModelSerializer):

    class Meta:
        model = Snippet
        fields = ('id', 'title', 'code', 'linenos', 'language', 'style')

sn-ps/models.py:

from django.db import models
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles

LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLE_CHOICES = sorted((item, item) for item in get_all_styles())

class Snippet(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default='')
    code = models.TextField()
    linenos = models.BooleanField(default=False)
    language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
    style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)

    class Meta:
        ordering = ('created',)

外壳:

$ python manage.py shell_plus
>>> from snippets.serializers import SnippetSerializer
>>> serializer = SnippetSerializer()
>>> serializer
    <snippets.serializers.SnippetSerializer object at 0x10220f110>
>>> print repr(serializer)
    <snippets.serializers.SnippetSerializer object at 0x10220f110>

【问题讨论】:

  • 我也没有在我的 shell 上看到本教程建议我们应该看到的冗长的“repr”输出——使用 Django 1.6,无论我使用什么序列化程序

标签: python django rest serialization


【解决方案1】:

我相信这是因为您正在返回序列化程序对象。为了返回实际数据,您必须引用 data 属性:

print repr(serializer.data)

【讨论】:

  • 这确实向我显示了数据(就像普通的'print serializer.data'一样)。但在本教程中,“repr(serializer)”用于检查序列化程序的模式——所有列名、类型和验证。这就是我要找的
【解决方案2】:

在我意识到我安装了 2.4 版之前,我遇到了同样的问题。

只需阅读发行说明并更新到 3.0 版

例如如果您使用 requirements.txt,请将其余框架行更改为:

djangorestframework==3.0

然后运行

pip install -r requirements.txt

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2023-03-18
    • 1970-01-01
    • 2020-08-04
    • 2021-03-09
    • 1970-01-01
    • 2019-01-17
    • 2016-12-18
    • 2017-06-04
    相关资源
    最近更新 更多