Django Rest框架发布多个具有many=True raise AttributeError“list”的对象没有属性“get”

2024-10-03 21:30:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图重写ListCreateAPIView的create方法,以便能够同时发布多个对象。项目保存正确,但我一直收到一个错误。在

我使用的是Django 1.10.4和drf3.5.3

在模型.py以下内容:

class Genre(models.Model):
     name = models.CharField(max_length=255, null=False, blank=False)
     category = models.ForeignKey(GenreCategory, related_name='genres', blank=True, null=True)
     active = models.BooleanField(default=False)

在视图.py以下内容:

^{pr2}$

在序列化程序.py以下内容:

class GenreInputSerializer(serializers.ModelSerializer):
    class Meta:
        model = Genre
        fields = ('name', 'category',)

请求后数据(通过可浏览的API):

[
    {
        "name": "Reggae",
        "category": null
    },
    {
        "name": "Blues",
        "category": null
    }
]

这是回溯:

Traceback (most recent call last):
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/django/core/handlers/base.py", line 217, in _get_response
response = self.process_exception_by_middleware(e, request)
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/django/core/handlers/base.py", line 215, in _get_response
response = response.render()
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/django/template/response.py", line 109, in render
self.content = self.rendered_content
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/response.py", line 72, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context)
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/renderers.py", line 701, in render
context = self.get_context(data, accepted_media_type, renderer_context)
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/renderers.py", line 674, in get_context
'post_form': self.get_rendered_html_form(data, view, 'POST', request),
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/renderers.py", line 507, in get_rendered_html_form
return self.render_form_for_serializer(serializer)
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/renderers.py", line 515, in render_form_for_serializer
serializer.data,
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/serializers.py", line 527, in data
ret = super(Serializer, self).data
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/serializers.py", line 266, in data
self._data = self.get_initial()
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/serializers.py", line 399, in get_initial
for field_name, field in self.fields.items()
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/serializers.py", line 400, in <listcomp>
if (field.get_value(self.initial_data) is not empty) and
  File "/Users/malastas/Documents/museekenv/lib/python3.4/site-packages/rest_framework/fields.py", line 435, in get_value
return dictionary.get(self.field_name, empty)
AttributeError: 'list' object has no attribute 'get'

对象被正确保存,但在访问时,在响应期间会引发错误序列化程序.data在

我看到过很多只使用many=True发布多个对象的例子,所以我不明白为什么这会引起错误,你知道吗?在


Tags: inpyselfrestgetlibpackagesline
2条回答

嗨,在你的定义列表上试试这个:

def list(self, request):
    queryset = self.get_queryset()
    serializer = GenreOutputSerializer(queryset, many=True,safe=False, context={'request': request})
    return Response(serializer.data)

我敢打赌,错误是因为browsablepi试图显示一个与它从响应中获得的序列化程序匹配的表单,但由于不需要列表而失败。在

您应该尝试将请求作为纯JSON执行,它应该可以工作。 请注意,虽然正确的响应失败,但是应该创建您的内容。在

相关问题 更多 >