Python Django-由记录的用户ViewSet创建的项

Python Django-由记录的用户ViewSet创建的项,python,django,Python,Django,我想要的是:一个登录用户创建一个项目,该项目使用该用户ForeignKey存储在数据库中 我有两个代码:它们都应该做相同的事情(创建链接到当前用户的项目),但其中一个可以工作,另一个不能。让请求工作,我专注于POST请求 第一个代码(工作后): 第二个代码(POST不工作): 我的网址: from django.urls import path, include from api_v1.exchanges.views import UserPortfolioViewSet, UserExchan

我想要的是:一个登录用户创建一个项目,该项目使用该用户ForeignKey存储在数据库中

我有两个代码:它们都应该做相同的事情(创建链接到当前用户的项目),但其中一个可以工作,另一个不能。让请求工作,我专注于POST请求

第一个代码(工作后):

第二个代码(POST不工作):

我的网址:

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',
    )