在Django中序列化Object时的AssertionError

时间:2014-10-15 17:14:11

标签: python django django-rest-framework

在Django中我想序列化(通过Rest)一个Lecteur对象,如下所示:

from django.db import models
from django.contrib.auth.models import User

class Lecteur(User):
    bibliotheque = models.ManyToManyField('bibliotheque.Livre')

序列化器:

from rest_framework import serializers
from .models import Lecteur
from bibliotheque.serializers import LivreSerializer

class LecteurSerializer(serializers.ModelSerializer):
    bibliotheque = LivreSerializer(source='bibliotheque')
    class Meta:
        model=Lecteur
        fields = ('bibliotheque')

问题是,当我评估此行时,我有一个AssertionError 我认为serializer = LecteurSerializer(lecteur)

@csrf_exempt
def bibliotheque(request, id):
    """
    Show user's bibliotheque \w id    
    """
    try:
        lecteur = Lecteur.objects.get(id=id)
    except Lecteur.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'GET':
        serializer = LecteurSerializer(lecteur)
        return JSONResponse(serializer.data)

希望你能提供帮助。

1 个答案:

答案 0 :(得分:0)

首先,您应该提供完整的回溯,以便我们可以深入研究问题,而无需重新创建您的所有环境。这是常识。

问题在于:

fields = ('bibliotheque')

正如断言错误所说,字段应该是列表或元组,或其他可迭代的。

在这里你应该忽略一件事:Python元组语法与操作顺序语法冲突。 所以,('a') == 'a'。要创建一个元素的元组,您应该使用hack:('a',)。请注意逗号!

所以,如果你的情况,修复将是:

fields = ('bibliotheque',)