在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)
希望你能提供帮助。
答案 0 :(得分:0)
首先,您应该提供完整的回溯,以便我们可以深入研究问题,而无需重新创建您的所有环境。这是常识。
问题在于:
fields = ('bibliotheque')
正如断言错误所说,字段应该是列表或元组,或其他可迭代的。
在这里你应该忽略一件事:Python元组语法与操作顺序语法冲突。
所以,('a') == 'a'
。要创建一个元素的元组,您应该使用hack:('a',)
。请注意逗号!
所以,如果你的情况,修复将是:
fields = ('bibliotheque',)