我对模型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
但我真的很担心在这里使用两个装饰器。它会起作用吗?这种情况下的最佳做法有何不同?