2017-06-21 85 views
1

我正在使用Django Viewflow,就像没有gui的流引擎。 任何人都可以发布一个用于编程创建流程和流程管理的示例吗?我不明白如何在没有前端的情况下完全从django代码(例如来自测试课程)管理流程。我需要首先创建一个流程实例吗?我如何知道我必须执行哪项任务以及如何执行?我只需要使用没有GUI的视图流django视图测试

在此先感谢!

MyApp的/ models.py

class MedicalParameters(models.Model): 
    # medical parameters 
    pas = models.IntegerField(verbose_name="Pressione Sistolica") 
    pad = models.IntegerField(verbose_name="Pressione Diastolica") 
    fc = models.IntegerField(verbose_name="Frequenza Cardiaca") 

class Triage(models.Model): 
    date = models.DateTimeField(auto_now=True) 
    patient_id = models.CharField(max_length=20) 
    first_name = models.CharField(max_length=150) 
    last_name = models.CharField(max_length=150) 
    birth_date = models.DateField(auto_now=False) 
    sex = models.CharField(max_length=1, choices=SEX, default='M') 

    # Medical Parameters 
    parameters = models.ForeignKey(MedicalParameters, blank=True, null=True, 
            on_delete=models.PROTECT) 



class TriageProcess(Process): 
    triage = models.ForeignKey(Triage, blank=True, null=True, on_delete=models.CASCADE) 

    class Meta: 
     verbose_name_plural = 'Triage process' 

MyApp的/ flow.py

class TriageFlow(Flow): 
    process_class = TriageProcess 

    process_title = 'Processo di Triage' 
    process_description = 'Processo di Triage' 

    summary_template = """ 
      Triage di {{ process.triage.first_name }} {{ process.triage.last_name }} 
      """ 

    start = (
     flow.Start(
      views.StartView, 
      task_title="Nuovo Triage", 
      task_description="Inizia Triege" 
     ).Permission(
      auto_create=True 
     ).Next(this.register_measures) 
    ) 

    register_measures = (
     flow.View(
      views.MeasuresView, 
      # fields=["parameters"], 
      task_description="Acquisisci Misure", 
      task_title='Misure da Multiparametrico' 
     ) 
      .Assign(lambda act: act.process.created_by) 
      .Next(this.choose_capitolo) 
    ) 

MyApp的/ view.py

class StartView(StartFlowMixin, generic.UpdateView): 
    form_class = TriageForm 

    layout = Layout(
     Row('patient_id'), 
     Fieldset('Patient Details', 
       Row('first_name', 'last_name', 'birth_date'), 
       Row('sex', 
        # 'age' 
        ) 
       ) 
    ) 

    def get_object(self): 
     return self.activation.process.triage 

    def activation_done(self, form): 
     triage = form.save() 
     self.activation.process.triage = triage 
     self.activation.process.triage.color = COLOR_VALUE.BIANCO 
     super(StartView, self).activation_done(form) 

     # super(StartView, self).activation_done(form) 



class MeasuresView(FlowMixin, generic.UpdateView): 
    form_class = MedicalParametersForm 
    layout = Layout(
     Fieldset('Temperatura (C)', 
       Row('temp')), 
     Fieldset('Pressione', 
       Row('pas'), 
       Row('pad')), 
     Fieldset('Frequenza', 
       Row('fc'), 
       Row('fr'), 
       Row('fio2')), 
     Fieldset("Analisi Cliniche", 
       Row('so2'), 
       Row('ph')), 
     Fieldset('Emogas', 
       Row('pao2'), 
       Row('paco2'), 
       Row('hco3')), 
     Fieldset("Indici", 
       Row('gcs') 
       # Row('shock') 
       )) 

    def get_object(self): 
     return self.activation.process.triage.parameters 

    def activation_done(self, form): 
     _measures = form.save() 
     self.activation.process.triage.parameters = _measures 
     if not self.activation.process.triage.parameters.fc is None \ 
       and not self.activation.process.triage.parameters.pas is None: 
      self.activation.process.triage.parameters.shock = self.activation.process.triage.parameters.fc/self.activation.process.triage.parameters.pas 
      self.activation.process.triage.parameters.save() 
     color = _measures.calculate_color() 
     self.activation.process.triage.color = color 
     self.activation.process.triage.rivalutazione = None 

     self.activation.process.triage.save() 
     super(MeasuresView, self).activation_done(form) 

回答

1

与TES t在TestClass中的流程可以照常使用django TestClient。重复您在浏览器中手动执行的相同步骤。

您可以检查的例子中的HelloWorld演示试验 - https://github.com/viewflow/cookbook/blob/master/helloworld/demo/tests.py

class Test(TestCase): 
    def setUp(self): 
     User.objects.create_superuser('admin', '[email protected]', 'password') 
     self.client.login(username='admin', password='password') 

    def testApproved(self): 
     self.client.post(
      '/workflow/helloworld/helloworld/start/', 
      {'text': 'Hello, world', 
      '_viewflow_activation-started': '2000-01-01'} 
     ) 

     self.client.post(
      '/workflow/helloworld/helloworld/1/approve/2/assign/' 
     ) 

     self.client.post(
      '/workflow/helloworld/helloworld/1/approve/2/', 
      {'approved': True, 
      '_viewflow_activation-started': '2000-01-01'} 
     ) 

     process = Process.objects.get() 

     self.assertEquals('DONE', process.status) 
     self.assertEquals(5, process.task_set.count())