【问题标题】:Django rest framework: Insert multiple objects in one post requestDjango rest框架:在一个post请求中插入多个对象
【发布时间】:2018-01-18 08:16:32
【问题描述】:

我将 DRF 用于我的 API 后端。我需要在一个帖子请求中插入多个对象。我看了很多教程,还有How do I create multiple model instances with Django Rest Framework?,但没有成功。我正在使用 ModelSerializer,但是当使用 ma​​ny=True 时,ListSerializer 会出现问题。

views.py

class SaleUserViewSet(ModelViewSet):
    queryset = SaleUser.objects.all()
    serializer_class = SaleUserSerializer(many=True)

serializers.py

class SaleUserSerializer(serializers.ModelSerializer):

    class Meta:
        model = SaleUser
        fields = ('id', 'comment', 'creation_date', 'modification_date', 'last_user', 'user', 'sale', 'user_sale_type')

错误信息

AttributeError at /api/sale_user/ type object 'Meta' has no attribute 'model'

请指教。

【问题讨论】:

  • 欢迎来到stackoverflow。嗨,请添加您的代码和错误跟踪。
  • 谢谢熊,我用代码和错误信息编辑了我的问题。

标签: python django serialization django-rest-framework


【解决方案1】:

将序列化程序回滚到您的默认值

class SaleUserSerializer(serializers.ModelSerializer):

    class Meta:
        model = SaleUser
        fields = (
            'id',
            'comment',
            'creation_date',
            'modification_date',
            'last_user',
            'user',
            'sale',
            'user_sale_type'
        )

并覆盖它的视图:

from rest_framework.response import Response    

class SaleUserViewSet(ModelViewSet):
    queryset = SaleUser.objects.all()
    serializer_class = SaleUserSerializer

    def create(self, request, *args, **kwargs):
        data = request.data.get('items', request.data)
        many = isinstance(data, list)
        print (data, many)
        serializer = self.get_serializer(data=data, many=many)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(
                serializer.data,
                status=status.HTTP_201_CREATED,
                headers=headers
        )

【讨论】:

  • 我将data = request.data.get("items") if 'items' in request.data else data = request.data 重写为` if 'items' in request.data: data = request.data.get("items") else: data = request.data` 因为我收到此错误@ 987654324@ 重写的代码仍然得到错误AssertionError at /api/sale_user/ Cannot call .is_valid()`,因为在实例化序列化程序实例时没有传递data= 关键字参数。`
  • 对不起,我解决了这两个问题你可以再试一次
  • 好的,我又试了一次,现在我有新错误NameError at /api/sale_user/ name 'status' is not defined :(
  • 很好 :) 只需将 from rest_framework import status 添加到您的导入中
  • @yaksh 将导入添加到答案中,供其他搜索相同内容的人使用
猜你喜欢
  • 2021-08-01
  • 2018-12-20
  • 2020-06-15
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2023-03-16
  • 2016-04-07
  • 2021-05-06
相关资源
最近更新 更多