Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Rest框架对象没有属性pk_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django Rest框架对象没有属性pk

Python Django Rest框架对象没有属性pk,python,django,django-rest-framework,Python,Django,Django Rest Framework,我在Django/DjangoRestFramework中工作,试图使用额外的操作来构建一个可路由的外键。我得到了以下错误,我相信这与FinancialSerializer上的create方法有关,或者与该方法的缺乏有关,但我不确定 web_1 | AttributeError: 'dict' object has no attribute 'pk' stocks.viewset 19 class StockViewSet(viewsets.ModelViewSet): 20

我在Django/DjangoRestFramework中工作,试图使用额外的操作来构建一个可路由的外键。我得到了以下错误,我相信这与
FinancialSerializer
上的create方法有关,或者与该方法的缺乏有关,但我不确定

web_1  | AttributeError: 'dict' object has no attribute 'pk'
stocks.viewset

   19 class StockViewSet(viewsets.ModelViewSet):
   20     queryset = Stock.objects.all()
   21     serializer_class = StockSerializer
   22     lookup_url_kwarg = "ticker"
   23     lookup_field = "ticker__iexact"
   24
   25     @action(detail=True, methods=["POST", "GET"])
   26     def financials(self, request, ticker=None):
   27         if request.method == "GET":
   28             stock = self.get_object()
   29             financials = stock.get_financials()
   30             financials = FinancialsSerializer(financials)
   31             return Response(financials.data)
   32         if request.method == "POST":
   33             serializer = FinancialsSerializer(request.data)
   34             financials = Financials.objects.create(serializer.data)
   35             financials.save()
财务连载器

  9 class FinancialsSerializer(WritableNestedModelSerializer):
 10     balance_sheet = BalanceSheetSerializer()
 11     income_statement = IncomeStatementSerializer()
 12     cashflows_statement = CashflowsStatementSerializer()
 13
 14     class Meta:
 15         model = Financials
 16         fields = ["balance_sheet", "income_statement", "cashflows_statement"]

我在你的代码中看到了几个问题

首先,对于
GET
方法:

serializer=FinancialsSerializer(financials,many=True)
返回响应(serializer.data)
第二,对于
POST
方法:

serializer=FinancialsSerializer(data=request.data)
serializer.is\u有效(raise\u exception=True)
serializer.save()
返回响应(serializer.data)

我发现您的代码中有几个问题

首先,对于
GET
方法:

serializer=FinancialsSerializer(financials,many=True)
返回响应(serializer.data)
第二,对于
POST
方法:

serializer=FinancialsSerializer(data=request.data)
serializer.is\u有效(raise\u exception=True)
serializer.save()
返回响应(serializer.data)

发布某些数据时,我现在得到的状态码是200,而不是201。它没有为meChange创建对象,以便返回响应(serializer.data,status=201)。状态代码
200
并不意味着没有创建该对象。如果这是您认为它没有在db中被创建的唯一原因,并且对象没有被创建。financials是stock对象的外键,这是为什么呢?发布一些数据时,我现在得到的是200状态码,而不是201。它没有为meChange创建对象,以便返回响应(serializer.data,status=201)。状态代码
200
并不意味着没有创建该对象。如果这是您认为它没有在db中被创建的唯一原因,并且对象没有被创建。财务是股票对象的外键,这是为什么?