在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)
首先,您应该提供完整的回溯,这样我们就可以在不重新创建所有环境的情况下深入研究问题。这是常识。
问题是:
fields = ('bibliotheque')
正如断言错误所说,字段应该是列表或元组,或者其他可迭代字段。
在这里,您应该强调一件事:Python元组语法与操作顺序语法冲突。因此,('a') == 'a'
。要创建一个由一个元素组成的元组,您应该使用一个破解:('a',)
。注意逗号!
所以,如果你的情况,修复将是:
fields = ('bibliotheque',)