Django viewflow扩展任务视图

Django viewflow扩展任务视图,django,django-permissions,django-viewflow,Django,Django Permissions,Django Viewflow,我正在尝试一个想法,在一个会有一些复杂权限规则的应用程序中同时使用和。我对django权限工作方式的理解是,向要应用权限规则的视图添加一个装饰器 通过扩展基本viewflow视图并将url.py指向扩展视图,我成功地在流程视图上实现了这一点。当我尝试在任务中遵循相同的想法时,我遇到了下面列出的错误 类型对象“CBVTask”没有属性“flow\u class” 型号.py class CBVArticle(models.Model): created_by = models.Foreig

我正在尝试一个想法,在一个会有一些复杂权限规则的应用程序中同时使用和。我对django权限工作方式的理解是,向要应用权限规则的视图添加一个装饰器

通过扩展基本viewflow视图并将url.py指向扩展视图,我成功地在流程视图上实现了这一点。当我尝试在任务中遵循相同的想法时,我遇到了下面列出的错误

类型对象“CBVTask”没有属性“flow\u class”

型号.py

class CBVArticle(models.Model):
    created_by = models.ForeignKey(User)
    title = models.CharField(max_length=100)
    content = models.TextField()

class CBVArticleProcess(Process):
    article = models.ForeignKey(CBVArticle, blank=True, null=True)

class CBVTask(Task):

    class Meta:
        proxy = True
class CBVArticleFlow(Flow):
    process_class = models.CBVArticleProcess
    task_class = models.CBVTask

    start = (
        flow.Start(views.ArticleCreate).Next(this.end)
    )

    end =flow.End()
myflow_urls = FlowViewSet(CBVArticleFlow).urls  

urlpatterns = [
    url(r'^process/(?P<process_pk>\d+)/$', views.TestDetailProcessView.as_view(), kwargs = dict(flow_class=CBVArticleFlow), name='detail'),
    url(r'^process/(?P<process_pk>\d+)/start/(?P<task_pk>\d+)/detail/$', views.DetailTaskView.as_view(), kwargs = dict(flow_class=CBVArticleFlow, flow_task=CBVTask), name='start__detail'),
]
from viewflow.flow.views import DetailProcessView as BaseDetailProcessView, DetailTaskView as BaseDetailTaskView

@permission_required('test_app_cbv.view_cbvarticleprocess')
class TestDetailProcessView(BaseDetailProcessView):
    template_name = 'test_app_cbv/detail.html'

    def get_queryset(self):
        pk = self.kwargs['process_pk']

        return models.CBVArticleProcess.objects.filter(process_ptr_id = pk)

class DetailTaskView(BaseDetailTaskView):
    template_name = 'test_app_cbv/task_detail.html'
myflow_urls = FlowViewSet(CBVArticleFlow).urls  

urlpatterns = [
    url(r'^process/(?P<process_pk>\d+)/$', views.TestDetailProcessView.as_view(), kwargs = dict(flow_class=CBVArticleFlow), name='detail'),
    url(r'^process/(?P<process_pk>\d+)/start/(?P<task_pk>\d+)/detail/$', views.DetailTaskView.as_view(), kwargs = dict(flow_class=CBVArticleFlow, flow_task=CBVArticleFlow.start), name='start__detail'),
]
flow.py

class CBVArticle(models.Model):
    created_by = models.ForeignKey(User)
    title = models.CharField(max_length=100)
    content = models.TextField()

class CBVArticleProcess(Process):
    article = models.ForeignKey(CBVArticle, blank=True, null=True)

class CBVTask(Task):

    class Meta:
        proxy = True
class CBVArticleFlow(Flow):
    process_class = models.CBVArticleProcess
    task_class = models.CBVTask

    start = (
        flow.Start(views.ArticleCreate).Next(this.end)
    )

    end =flow.End()
myflow_urls = FlowViewSet(CBVArticleFlow).urls  

urlpatterns = [
    url(r'^process/(?P<process_pk>\d+)/$', views.TestDetailProcessView.as_view(), kwargs = dict(flow_class=CBVArticleFlow), name='detail'),
    url(r'^process/(?P<process_pk>\d+)/start/(?P<task_pk>\d+)/detail/$', views.DetailTaskView.as_view(), kwargs = dict(flow_class=CBVArticleFlow, flow_task=CBVTask), name='start__detail'),
]
from viewflow.flow.views import DetailProcessView as BaseDetailProcessView, DetailTaskView as BaseDetailTaskView

@permission_required('test_app_cbv.view_cbvarticleprocess')
class TestDetailProcessView(BaseDetailProcessView):
    template_name = 'test_app_cbv/detail.html'

    def get_queryset(self):
        pk = self.kwargs['process_pk']

        return models.CBVArticleProcess.objects.filter(process_ptr_id = pk)

class DetailTaskView(BaseDetailTaskView):
    template_name = 'test_app_cbv/task_detail.html'
myflow_urls = FlowViewSet(CBVArticleFlow).urls  

urlpatterns = [
    url(r'^process/(?P<process_pk>\d+)/$', views.TestDetailProcessView.as_view(), kwargs = dict(flow_class=CBVArticleFlow), name='detail'),
    url(r'^process/(?P<process_pk>\d+)/start/(?P<task_pk>\d+)/detail/$', views.DetailTaskView.as_view(), kwargs = dict(flow_class=CBVArticleFlow, flow_task=CBVArticleFlow.start), name='start__detail'),
]
url.py

class CBVArticle(models.Model):
    created_by = models.ForeignKey(User)
    title = models.CharField(max_length=100)
    content = models.TextField()

class CBVArticleProcess(Process):
    article = models.ForeignKey(CBVArticle, blank=True, null=True)

class CBVTask(Task):

    class Meta:
        proxy = True
class CBVArticleFlow(Flow):
    process_class = models.CBVArticleProcess
    task_class = models.CBVTask

    start = (
        flow.Start(views.ArticleCreate).Next(this.end)
    )

    end =flow.End()
myflow_urls = FlowViewSet(CBVArticleFlow).urls  

urlpatterns = [
    url(r'^process/(?P<process_pk>\d+)/$', views.TestDetailProcessView.as_view(), kwargs = dict(flow_class=CBVArticleFlow), name='detail'),
    url(r'^process/(?P<process_pk>\d+)/start/(?P<task_pk>\d+)/detail/$', views.DetailTaskView.as_view(), kwargs = dict(flow_class=CBVArticleFlow, flow_task=CBVTask), name='start__detail'),
]
from viewflow.flow.views import DetailProcessView as BaseDetailProcessView, DetailTaskView as BaseDetailTaskView

@permission_required('test_app_cbv.view_cbvarticleprocess')
class TestDetailProcessView(BaseDetailProcessView):
    template_name = 'test_app_cbv/detail.html'

    def get_queryset(self):
        pk = self.kwargs['process_pk']

        return models.CBVArticleProcess.objects.filter(process_ptr_id = pk)

class DetailTaskView(BaseDetailTaskView):
    template_name = 'test_app_cbv/task_detail.html'
myflow_urls = FlowViewSet(CBVArticleFlow).urls  

urlpatterns = [
    url(r'^process/(?P<process_pk>\d+)/$', views.TestDetailProcessView.as_view(), kwargs = dict(flow_class=CBVArticleFlow), name='detail'),
    url(r'^process/(?P<process_pk>\d+)/start/(?P<task_pk>\d+)/detail/$', views.DetailTaskView.as_view(), kwargs = dict(flow_class=CBVArticleFlow, flow_task=CBVArticleFlow.start), name='start__detail'),
]

提前感谢您的指点

这是一个新手犯的错误-url.py文件的内容应该如下所示:

url.py

class CBVArticle(models.Model):
    created_by = models.ForeignKey(User)
    title = models.CharField(max_length=100)
    content = models.TextField()

class CBVArticleProcess(Process):
    article = models.ForeignKey(CBVArticle, blank=True, null=True)

class CBVTask(Task):

    class Meta:
        proxy = True
class CBVArticleFlow(Flow):
    process_class = models.CBVArticleProcess
    task_class = models.CBVTask

    start = (
        flow.Start(views.ArticleCreate).Next(this.end)
    )

    end =flow.End()
myflow_urls = FlowViewSet(CBVArticleFlow).urls  

urlpatterns = [
    url(r'^process/(?P<process_pk>\d+)/$', views.TestDetailProcessView.as_view(), kwargs = dict(flow_class=CBVArticleFlow), name='detail'),
    url(r'^process/(?P<process_pk>\d+)/start/(?P<task_pk>\d+)/detail/$', views.DetailTaskView.as_view(), kwargs = dict(flow_class=CBVArticleFlow, flow_task=CBVTask), name='start__detail'),
]
from viewflow.flow.views import DetailProcessView as BaseDetailProcessView, DetailTaskView as BaseDetailTaskView

@permission_required('test_app_cbv.view_cbvarticleprocess')
class TestDetailProcessView(BaseDetailProcessView):
    template_name = 'test_app_cbv/detail.html'

    def get_queryset(self):
        pk = self.kwargs['process_pk']

        return models.CBVArticleProcess.objects.filter(process_ptr_id = pk)

class DetailTaskView(BaseDetailTaskView):
    template_name = 'test_app_cbv/task_detail.html'
myflow_urls = FlowViewSet(CBVArticleFlow).urls  

urlpatterns = [
    url(r'^process/(?P<process_pk>\d+)/$', views.TestDetailProcessView.as_view(), kwargs = dict(flow_class=CBVArticleFlow), name='detail'),
    url(r'^process/(?P<process_pk>\d+)/start/(?P<task_pk>\d+)/detail/$', views.DetailTaskView.as_view(), kwargs = dict(flow_class=CBVArticleFlow, flow_task=CBVArticleFlow.start), name='start__detail'),
]
myflow\u url=FlowViewSet(CBVArticleFlow).url
URL模式=[
url(r'^process/(?P\d+/$),views.TestDetailProcessView.as_view(),kwargs=dict(flow_class=CBVArticleFlow),name='detail'),
url(r'^process/(?P\d+)/start/(?P\d+)/detail/$),views.DetailTaskView.as_view(),kwargs=dict(flow_class=CBVArticleFlow,flow_task=CBVArticleFlow.start),name='start\u detail'),
]