Чтобы получить URL-адрес задачи, вам нужно всего лишь app_name(app_namespace), flow_namespace and flow_label
.Наиболее сложным элементом здесь является пространство имен_потока (если вы не использовали URL-адреса веб-интерфейса).Чтобы решить эту проблему, вы можете использовать карту, заимствованную из ns_map от FlowListMixin.Определение пространства имен потока для каждого потока в вашем проекте.Затем вы определяете пространство имен потоков и url_name из приведенного выше.
ns_map = {'MyFlow':'flow_namespace', 'AnotherFlow':flow_namespace2'}
# flow_namespace as defined in the urls.py
# e.g if you defined your flow urls as
# flow_urls = FlowViewSet(MyFlow).urls
# flow_urls2 = FLowViewSet(MyFlow2).urls
# urlpatterns = [url(r'flow_path/', include(flow_urls, name=flow_namespace)),
# url(r'flow_path2/', include(flow_urls2, name=flow_namespace2)),
# ]
# With this is included in the root_url as
# urlpatterns = [
# url(r'app/' include(app_urls, namespace='app_namespace')
#]
Вам нужно повернуть поток как этот обратный процесс ('app_name: flow_namespace: flow_label', kwargs = {'process_pk': ppk,'task_pk': tpk})
flow_class_name = task.process.flow_class.__name__
flow_namespace = ns_map.get(flow_class_name)
app_name = task.process.flow_class.__module__.split('.')[0]
flow_label = task.flow_task.name
url_name = "{}:{}:{}".format(app_name, flow_label, url_name)
Then you can reverse your task url
url = reverse(url_name, kwargs={"task_pk", task.pk, "process_pk":task.flow_process.pk}
# If you know where you are you could use resolver match to determine
# the app namespace. Be Sure of this, see more of that [here][1]
ПРИМЕЧАНИЕ. Я предполагаю, что вы называете свои приложения в пространстве как app_name. Если оно отличается, вам нужно найти альтернативы для поиска пространства имен app_names, но это не должно бытьслишком сложно.