Я могу заставить встроенный набор форм работать нормально с django, но при попытке использовать viewflow и встроенный интерфейс рабочего процесса, я не могу заставить встроенную форму работать во время рабочего процесса.
Как правильно ссылаться на набор форм?
Поскольку модели рабочих процессов наследуются от объекта viewflow.models.Process, я не могу понять, как для создания встроенной связанной модели.
Вариант использования: у меня есть рабочий процесс с около 50 различными полями, и я могу прекрасно запустить рабочий процесс, используя Flow и разбивая процесс на логические части примерно за 10 шагов. Однако после запуска процесса и ввода первых 3 или 4 полей я хочу, чтобы шаг 2 представлял собой встроенную форму, в которой пользователям назначаются различные роли (неизвестное число) для этого конкретного события рабочего процесса.
I у меня уже есть отдельная таблица, в которой они назначаются ролям вручную, и я могу сделать так, чтобы Flow назначил следующую задачу тому, кому назначена эта роль «шагов», и она работает нормально, но я хочу, чтобы действие по назначению ролей было частью сам фактический рабочий процесс.
Я подозреваю, что должен добавить набор inlineformset в качестве поля родительской модели (Process), но не мог понять, как ...
Я подхожу близко (по крайней мере, с кодом ниже, но
- Я не получаю повторяющуюся встроенную форму
- , когда я отправляю сообщение об ошибке с Данные ManagementForm отсутствуют или были подделаны
# models.py
from django.db import models
from django.utils import timezone
from filer.fields.file import FilerFileField
from viewflow.models import Process
# Create your models here.
class RoutingSheetProcess(Process):
project = models.CharField(verbose_name=u"Project#",max_length=20,blank=False,null=False)
internaltask = models.CharField(verbose_name=u"Task #",max_length=20,blank=False,null=False)
pono = models.CharField(verbose_name=u"P.O. Number",max_length=20,blank=True,null=True)
sampletype = models.CharField(verbose_name=u"Sample Type",max_length=10)
sampleother = models.CharField(verbose_name=u"Other Sample Type",max_length=20,blank=True,null=True)
sampledate = models.DateField(verbose_name=u"Date Sample Taken",blank=True,null=True)
class InlineModel(models.Model):
routingsheet = models.ForeignKey(RoutingSheetProcess,on_delete=models.CASCADE,blank=False,null=False)
field1 = models.CharField(max_length=20,blank=True,null=True)
field2 = models.CharField(max_length=20,blank=True,null=True)
field3 = models.CharField(max_length=20,blank=True,null=True)
# flows.py
from viewflow import flow, frontend
from viewflow.base import this, Flow
from viewflow.flow.views import CreateProcessView, UpdateProcessView
from .models import RoutingSheetProcess
from . import views
@frontend.register
class RoutingSheetFlow(Flow):
process_class = RoutingSheetProcess
start = (
flow.Start(
CreateProcessView,
fields=["project","internaltask","pono"]
).Permission(
auto_create=True
).Next(this.sample)
)
sample = (
flow.View(
UpdateProcessView,
fields=["sampletype","sampleother","sampledate"]
).Permission(
auto_create=True
).Next(this.inline_sample)
)
inline_sample = (
flow.View(
views.InlineSample
).Permission(
auto_create=True
).Next(this.end)
)
end = flow.End()
# views.py
from django.shortcuts import render
from viewflow.flow.views import CreateProcessView, UpdateProcessView
# Create your views here.
from .forms import *
from material import *
class InlineSample(UpdateProcessView):
form_class=InlineForm
def get_context_data(self, **kwargs):
data = super(InlineSample, self).get_context_data(**kwargs)
if self.request.POST:
data['fields'] = InlineFormset(self.request.POST)
else:
data['fields'] = InlineFormset()
#print(data)
#for f in data['fields']:
# print(f)
return data
layout = Layout(
Fieldset('Inline Fields',
Row('field1','field2','field3'),
)
)
def get_object(self):
#print(self.activation.process)
return self.activation.process
# forms.py
from django import forms
from django.forms import ModelForm
from django.forms.models import inlineformset_factory, formset_factory
from .models import *
InlineFormset=inlineformset_factory(
RoutingSheetProcess, #parent
InlineModel, #child
fields=('field1','field2','field3'), #fieldlist from child
extra=2
)
class InlineForm(ModelForm):
class Meta:
model=InlineModel
exclude=[]
widgets = {
#'description':forms.Textarea,
}
Производит это на шаге 2 потока ... вывод шага 2