我为我的一个名为“creative”的资源创建了一个api端点。但是,我需要执行一个操作来实现此资源的暂停和启动(以更改名为status的字段)。因此,我为上述操作创建了一个@detail_route()。
我想要实现的目标:我需要更新此特定资源(模型)Creative的字段以及其外键为此模型的另一个模型的字段。
我在这个@detail_route()方法中调用了一个自定义函数toggleAdGroupState,我直接使用django模型而不是使用序列化器。这是允许的吗?这是实现我需要做的事情的正确方法吗?
class CreativeSerializer(serializers.ModelSerializer):
class Meta:
model = Creative
fields = ('__all__')
@detail_route(methods=['post','get','put'])
def startcreative(self, request, pk=None):
try:
creative_object= self.get_object()
creative_object.active_status=Creative._STATUS_ACTIVE
creative_object.save()
toggleAdGroupState(creative_object.id,"active")
except Exception as e:
print 'error is ',str(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return Response(status=status.HTTP_200_OK)
def toggleAdGroupState(creative_id,toggleFlag):
adgroup_obj = AdGroup.objects.filter(creative=creative_id)
for item in adgroup_obj:
if(toggleFlag == 'active'):
item.userActivate()
else:
item.userInactivate()
djangorestframework是3.2.2
答案 0 :(得分:0)
我相信正在遵循这些步骤
您可以针对每种方法进行此类操作。我已经展示了put
,
class View(generics.UpdateAPIView):
....
def update(self, request, *args, **kwargs):
# update creative model
response = generics.UpdateAPIView.update(self, request, *args, **kwargs)
if response.status == 200:
# update_another_model()