简体   繁体   中英

Django Rest Framework object has no attribute pk

I am working in Django / DjangoRestFramework trying to use extra actions to build out a foreignkey that is routable. I am getting the following error, I believe it has something to do with the create method on the FinancialsSerializer , or lack thereof, but I am not sure

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()

FinancialsSerializer

  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"]

I see a couple of issues in your code.

First, for GET method:

serializer = FinancialsSerializer(financials, many=True)
return Response(serializer.data)

Second, for POST method:

serializer = FinancialsSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM