1
我已经创建了一个API端点所说的“创造性”我的资源之一,使用串行。不过,我需要采取措施来实现暂停和启动此资源(更改名为状态的字段)。因此,我为上述操作创建了@detail_route()。访问和保存模型对象直接没有Django的REST框架
我是什么努力实现:我需要更新这个特定的资源(模型)创意的领域,以及它的外键是这个模型的另一个模型的领域。
我打电话的自定义函数toggleAdGroupState这@detail_route内()方法,在那里我直接在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
这是您希望随时更改模型active_status的操作吗?如果是这样,您最好在Creative模型上使用信号或自定义保存方法。 –
不清楚你在问什么。 – DhiaTN
@ KineticStack,@ DhiaTN - 用户将点击一个按钮,该按钮应该切换模型Creative的active_status字段(并更改此广告素材所属的另一个模型AdGroup的字段)。所以我把它和我的detail_route方法绑定在一起,点击按钮会对api端点 -/api/creative//startcreative进行放置或发布请求。 注意:上面的代码实现了我想要的功能。我的问题是这是否是一种可接受的方式(在不使用序列化程序的情况下直接访问django模型)在REST方法下。 –
ram