Python Django-由记录的用户ViewSet创建的项
我想要的是:一个登录用户创建一个项目,该项目使用该用户ForeignKey存储在数据库中 我有两个代码:它们都应该做相同的事情(创建链接到当前用户的项目),但其中一个可以工作,另一个不能。让请求工作,我专注于POST请求 第一个代码(工作后): 第二个代码(POST不工作): 我的网址:Python Django-由记录的用户ViewSet创建的项,python,django,Python,Django,我想要的是:一个登录用户创建一个项目,该项目使用该用户ForeignKey存储在数据库中 我有两个代码:它们都应该做相同的事情(创建链接到当前用户的项目),但其中一个可以工作,另一个不能。让请求工作,我专注于POST请求 第一个代码(工作后): 第二个代码(POST不工作): 我的网址: from django.urls import path, include from api_v1.exchanges.views import UserPortfolioViewSet, UserExchan
from django.urls import path, include
from api_v1.exchanges.views import UserPortfolioViewSet, UserExchangeConnectionsViewSet, ExchangesViewSet
from rest_framework.routers import DefaultRouter
# Create a router and register our viewsets with it.
router = DefaultRouter()
router.register(r'portfolios', UserPortfolioViewSet)
router.register(r'exchange-connections', UserExchangeConnectionsViewSet)
router.register(r'exchanges', ExchangesViewSet)
urlpatterns = [
path('', include(router.urls)),
]
我在发布时遇到的错误是:
TypeError: post() got an unexpected keyword argument 'pk'
您在操作中使用了detail=True
,这意味着您正在对特定对象发出检索请求,因此必须传递默认值pk
的lookup\u字段
如果只想发出创建请求,则应设置detail=False
更新代码
@action(
detail=False,
methods=['post'],
url_path='create-exchange-connection',
)
def post(self, serializer):
serializer = serializers.ExchangeConnectionPostSerializer(user=self.request.user)
if serializer.is_valid():
serializer.save()
return Response({'status': 'Exchange created.'})
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
您在操作中使用了detail=True
,这意味着您正在对特定对象发出检索请求,因此必须传递默认值pk
的lookup\u字段
如果只想发出创建请求,则应设置detail=False
更新代码
@action(
detail=False,
methods=['post'],
url_path='create-exchange-connection',
)
def post(self, serializer):
serializer = serializers.ExchangeConnectionPostSerializer(user=self.request.user)
if serializer.is_valid():
serializer.save()
return Response({'status': 'Exchange created.'})
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
作为
与常规操作一样,额外的操作可能针对以下两种情况:
单个对象或整个集合。要指示此情况,请设置
详细说明参数是否正确。路由器将配置其URL
相应的模式。e、 例如,DefaultRouter将配置详细信息
在URL模式中包含pk的操作
因此,您应该设置detail=False
@action(
detail=False,
methods=['post'],
url_path='create-exchange-connection',
)
作为
与常规操作一样,额外的操作可能针对以下两种情况:
单个对象或整个集合。要指示此情况,请设置
详细说明参数是否正确。路由器将配置其URL
相应的模式。e、 例如,DefaultRouter将配置详细信息
在URL模式中包含pk的操作
因此,您应该设置detail=False
@action(
detail=False,
methods=['post'],
url_path='create-exchange-connection',
)
用我的URL编辑。用我的URL编辑。我现在有这个错误TypeError:\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
@action(
detail=False,
methods=['post'],
url_path='create-exchange-connection',
)