在嵌套路由器 uri 中发布对象时自动设置关系

mat*_*eok 1 django rest post django-rest-framework

使用drf-extensions我能够实现嵌套路由,以便能够使用模式 /users/{pk}/comments 访问相关对象。虽然工作正常,但我想找到一种使用该 URI 创建对象的方法,其中外键将自动设置为 {pk} 中指定的父对象。我怎样才能做到这一点?

小智 5

github 存储库上存在问题。目前推荐的方法是显式实现此逻辑:

# viewsets
from rest_framework_extensions.utils import compose_parent_pk_kwarg_name


class CommentViewSet(ModelViewSet):
    pass


class UserCommentViewSet(NestedViewSetMixin, CommentViewSet):
    def create(self, request, *args, **kwargs):
        user_pk = getattr(self, compose_parent_pk_kwarg_name('user_comments'))
        request.DATA['user'] = user_pk
        return super(UserCommentViewSet, self).create(request, *args, **kwargs)


# routers
router = ExtendedSimpleRouter()

router.register(r'comments', CommentViewSet)
(
    router.register(r'users', UserViewSet, base_name='user')
          .register(r'comments',
                    UserCommentViewSet,
                    base_name='users-comments',
                    parents_query_lookups=['user_comments'])
)
Run Code Online (Sandbox Code Playgroud)