我有一个从许多模块调用的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/
答案 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)
...