同时使用@ list_route和@detail_route

时间:2016-03-23 16:27:01

标签: python django api rest django-rest-framework

我对模型A进行了特殊操作,它将对象(模型B的实例)添加到m2m关系中。我希望能够在我创建模型A的实例的同一请求中添加模型B的实例。为此,我将使用@list_route(methods=['post'])

但我也希望能够将模型B的实例添加到已经创建的模型A的实例中。为此我会使用@detail_route(methods=['patch'])。但是,这些视图操作的唯一区别在于获取/创建模型A的实例。理想情况下,我会使这个函数在获取模型A的实例时测试request.method。这看起来像这样:

@list_route(methods=['post'])
@detail_route(methods=['patch'])
def my_view(self, request, *args, **kwargs):
    if request.method == 'POST':
        # create and fetch instance of model A
        instance = A.objects.create(some_paramaters_here)
    else if request.method == 'PATCH':
        instance = self.get_object()

    # do things to add to instance
    for thing in request:
        instance.add(thing)

    return 201 # and fetch json output from serializer that I omitted here

但我真的很担心在这里使用两个装饰器。它会起作用吗?这种情况下的最佳做法有何不同?

0 个答案:

没有答案