Простейшее тестовое приложение с viewflow.io с использованием функциональных представлений, а не встроенных представлений на основе классов. Предполагаемая идея заключается в том, что продукт добавляется, а затем одобряется (через два разных вида/формы). Есть два вопроса, я не могу работать:.Пропускные переменные Django Viewflow с функцией на основе функции
- Я хочу передать
Product
на представление утверждения (так что пользователь делает утверждение может увидеть резюме того, что они предназначены для утверждения я не знаю, как это сделать - я попытался прохожденияproduct_pk
черезflow.View
вflows.py
, но это приводит к ошибке и, если я оставлю его, то вид утверждения обновляет все записи, а не текущий продукта flow.If
ворота в потоках.. py всегда кажется True, независимо от того, было ли проверено поле в продукте или нет. В идеале я надеюсь, что одобрение будет записано в модели продукта, а не в процессе модель
Наверное, принципиальная ошибка/концепция Я пропустил - любая помощь будет оценена.
В 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})
Форма, которая является ча lled - это очень простой класс ModelForm, и URL-адреса точно такие же, как описано в демонстрационных приложениях на страницах проекта GitHub. Шаблон имеет тег {{ activation.management_form }}
.
Kickass! :) Большое спасибо за супер быстрый ответ (надеюсь, мне удастся выработать оставшуюся часть Viewflow, не публикуя вопросов по каждому препятствию!) Приложение выглядит фантастично до сих пор BTW –