从api请求获取模型对象

时间:2018-08-13 09:07:54

标签: python django django-rest-framework

我有一个从许多模块调用的api_view。

url(r'^[0-9a-z\-]+/(?P<pk>[0-9a-z\-]+)/activate_entity/$', activate_entity)


@api_view(['POST', 'GET'])
def activate_entity(request, pk, *args, **kwargs):

在Activate_entity视图内动态获取模型对象实例而不编写太多if语句的正确方法是什么? ,例如,我从模块发票中调用它

api/v1/invoice/8f9ef9aa-94ac-412d-ba9d-343a70b55a96/activate_entity/
api/v1/finance/1234f9aa-94ac-412d-ba9d-343a70b55a96/activate_entity/

1 个答案:

答案 0 :(得分:4)

url(r'^(?P<entity>[0-9a-z\-]+)/(?P<pk>[0-9a-z\-]+)/activate_entity/$', activate_entity)

甚至

url(r'^(?P<entity>(invoice|finance|...))/(?P<pk>[0-9a-z\-]+)/activate_entity/$', activate_entity)

path('<slug:entity>/<uuid:pk>/activate_entity/', activate_entity)

然后

def activate_entity(request, entity, pk, *args, **kwargs):
    from django.apps import apps
    m = apps.get_model(app_label='my_app', model_name=entity)
    obj = m.objects.get(pk=pk)
    ...