【发布时间】:2016-03-24 08:06:59
【问题描述】:
使用基于函数的视图而不是基于内置类的视图,使用viewflow.io 尝试一个非常简单的测试应用程序。预期的想法是添加产品然后批准(通过两个不同的视图/表单)。有两个问题我似乎无法解决:
- 我想将
Product传递给批准视图(以便进行批准的用户可以看到他们要批准的内容的摘要。我不知道该怎么做 - 我尝试通过 @987654323 @ 通过flows.py中的flow.View,但这会导致错误,如果我将其忽略,那么审批视图会更新所有记录而不是当前产品。 - flows.py 中的
flow.If门似乎始终为 True,无论 Product 中的已批准字段是否已被检查。理想情况下,我希望批准记录在产品模型而不是流程模型中
可能是我缺少的超级基本错误/概念 - 任何帮助将不胜感激。
在 models.py
中class Product(models.Model):
name = models.CharField(max_length=30)
quantity = models.IntegerField()
approved = models.BooleanField(default=False)
def __str__(self):
return self.name
class ProductProcess(Process):
product = models.ForeignKey(Product, blank=True, null=True)
def approved(self):
return self.product.approved
class ProductTask(Task):
class Meta:
proxy = True
在 flows.py
中class ProductFlow(Flow):
process_cls = ProductProcess
task_cls = ProductTask
start = flow.Start(start_process).Next(this.approve)
approve = flow.View(approve_product).Next(this.checkapproval)
checkapproval = flow.If(cond=lambda p: p.approved()) \
.OnFalse(this.approve) \
.OnTrue(this.end)
end = flow.End()
在 views.py
中@flow_start_view()
def start_process(request, activation):
activation.prepare(request.POST or None,)
form = ProductForm(request.POST or None)
if form.is_valid():
Product.objects.create(
name = form.cleaned_data['name'],
quantity = form.cleaned_data['quantity']
)
activation.done()
return redirect('/test')
return render(request, 'viewflowtest/product.html', {'activation': activation, 'form': form})
@flow_view()
def approve_product(request, activation):
activation.prepare(request.POST or None,)
form = ApproveProductForm(request.POST or None)
if form.is_valid():
Product.objects.update(
approved = form.cleaned_data['approved']
)
activation.done()
return redirect('/test')
return render(request, 'viewflowtest/product.html', {'activation': activation, 'form': form})
调用的表单是一个非常基本的 ModelForm 类,并且 URL 与项目 GitHub 页面上的演示应用程序中描述的完全相同。该模板具有{{ activation.management_form }} 标签。
【问题讨论】:
标签: python django workflow django-viewflow