您好,我是DRF课程的新手
我正在尝试使用API从数据库到JSON检索数据,但是数据在许多字段和许多表中,这些表由外键链接。
我要从数据传递ID,API会使用此字段检索所有相关数据。
就像SQL中的Join
我正在通过我的模型创建序列化器和视图。
我的模型之一是:
class ModelPer(ModelMMixin, SQLMixin):
'''Model
'''
descricao = models.CharField(
verbose_name = _(u'Descrição'),
max_length = 250,
unique = False
)
ativo = models.BooleanField(
verbose_name= _(u'Ativo'),
default = False
)
slug = models.SlugField(
max_length=150,
unique=True,
default=uuid.uuid4()
)
我的序列化器是:
class PerSerializer(serializers.ModelSerializer):
class Meta:
model = ModelPer
fields = ['id', 'descricao']
我的看法是:
class PerView(APIView):
"""
View that return all forms in app
"""
def get(self, request):
queryset = ModelPer.objects.all()
serializer = PerSerializer(queryset)
print(serializer.data)
return Response(serializer.data)
但是我收到一个空的Json,因此当我尝试在Django Shell中进行调试时,我收到了以下消息:
>>> from per.models import ModelPer
>>> from api_form.serializers import PerSerializer
>>> queryset = ModelPer.objects.all()
>>> serializer = PerSerializer(queryset)
>>> serialzaer.data
错误
序列化程序字段的名称可能不正确,并且与QuerySet实例上的任何属性或键都不匹配。原始异常文本为:'QuerySet'对象没有属性'descricao'。
当我在终端中尝试检查序列化器时,如下所示:
>>> seriializer
我收到:
PerspectivaSerializer(<QuerySet [<ModelPer: Pespectiva 1>, <ModelPer: Pespectiva 2>, <ModelPer: Pespectiva 3>]>):
id = IntegerField(label='ID', read_only=True)
data_cadastro = DateTimeField(label='Data de Cadastro', required=False)
excluido = NullBooleanField(label='Excluído?', required=False)
data_exclusao = DateTimeField(allow_null=True, label='Data de Exclusão', required=False)
descricao = CharField(label='Descrição', max_length=250)
ativo = BooleanField(required=False)
slug = SlugField(allow_unicode=False, max_length=150, required=False, validators=[<UniqueValidator(queryset=ModelPer.objects.all())>])
usuario_cadastro = PrimaryKeyRelatedField(allow_null=True, label='Usuário que realizou o Cadastro', queryset=User.objects.all(), required=False)
usuario_exclusao = PrimaryKeyRelatedField(allow_null=True, label='Usuário que realizou a exclusão', queryset=User.objects.all(), required=False)
当我检查queryset时,确定!
有人可以帮助我吗?哪里是我的错误!谢谢
要序列化一个对象
queryset
或对象列表而不是单个对象实例,应many=True
在实例化序列化程序时传递该标志。然后,您可以传递查询集或要序列化的对象列表
因此,将many=True
参数用作
serializer = PerSerializer(queryset, many=True)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句