Сохранение данных процесса в другой таблице в базе данных - PullRequest
0 голосов
/ 19 февраля 2019

Я работаю над процессом для моей компании.Делая это, я обнаружил, что необходимо хранить данные, которые вставляются в процесс.Мой процесс работает нормально, но вместо сохранения в другой моей модели он продолжает сохранять данные в таблице, которая соответствует процессу, а не моей другой модели.

models.py:

from __future__ import unicode_literals
from datetime import datetime
from django.db import models
from viewflow.models import Process
from django.contrib.auth.models import User


class DeliveryProcess(Process):
    #### Asignador ###
    nombre_del_entregable= models.CharField(max_length=150)
    fecha_inicio=models.DateField(auto_now_add=False, default=datetime.now)
    fecha_de_terminacion=models.DateField(auto_now=False, default=datetime.now)
    ejecutor=models.ForeignKey(User,on_delete=models.CASCADE, null=True, related_name='+')
    observaciones_asignador=models.TextField()

    ##### Ejecutor #####
    echa_de_ejecucion=models.DateField(auto_now_add=False, default=datetime.now)
    oberservaciones_ejecutor=models.TextField()
    finalizado= models.BooleanField(default=False)
    revisor=models.ForeignKey(User,on_delete=models.CASCADE, null=True, related_name='+')
    aprobacion_final= models.BooleanField(default=False)
    anadir_revisor= models.BooleanField(default=False)

    ##### Revisor #####
    #    aprobacion_final= models.BooleanField(default=False)
    #    anadir_revisor= models.BooleanField(default=False)
    #    nuevo_revisor= models.ForeignKey(
    #    User,on_delete=models.CASCADE, null=True,  related_name='+')
    #    obserservaciones_revisor= models.TextField()

class Revisiones(models.Model):
    id_revision= models.AutoField(primary_key=True)
    fecha_de_revision=models.DateField(auto_now_add=False, default=datetime.now)
    revisor=models.ForeignKey(User,on_delete=models.CASCADE, null=True, related_name='+')
    aprobacion_final= models.BooleanField(default=False)
    anadir_revisor= models.BooleanField(default=False)
    observaciones_revisor= models.TextField()

flows.py:

from __future__ import unicode_literals
from viewflow import flow
from viewflow.base import this, Flow
from viewflow.flow.views import CreateProcessView, UpdateProcessView
from viewflow.lock import select_for_update_lock
from .models import DeliveryProcess
from viewflow import frontend
from . import views

@frontend.register
class Delivery_flow(Flow):
    process_class = DeliveryProcess

    start = (
        flow.Start(
            CreateProcessView,
            fields=["nombre_del_entregable", "fecha_inicio", 'fecha_de_terminacion', 'ejecutor','observaciones_asignador']
        ).Next(this.ejecutar)
    )

    ejecutar = (
        flow.View(
            UpdateProcessView,
                fields=["fecha_de_ejecucion", "oberservaciones_ejecutor", "finalizado","revisor"],
                task_description="Ejecutar"
            ).Assign(lambda act: act.process.ejecutor
            ).Next(this.revisor_check)
    )

    revisor_check = (
        flow.View(
        views.ReView,
        fields=["aprobacion_final",'anadir_revisor',"revisor",'observaciones_revisor', 'fecha_de_revision']
        ).Assign(lambda act: act.process.revisor)
            .Next(this.split)
    )

    split =(
        #If(lambda activation: activation.process.aprobacion_final)
        flow.Switch()
        .Case(this.end, cond=(lambda act: act.process.aprobacion_final))
        .Case(this.revisor_check, cond=(lambda act: act.process.anadir_revisor))
        .Case(this.ejecutar, cond=(not(lambda act: act.process.aprobacion_finale) and (lambda act: act.process.anadir_revisor)))
    )


    end = flow.End()

    def send_hello_world_request(self, activation):
        print(activation.process.text)

views.py:

from django.shortcuts import render
from django.views import generic
from viewflow.flow.views import CreateProcessView, UpdateProcessView
from .models import Revisiones
from viewflow.decorators import flow_start_view, flow_view
from viewflow.flow.views import StartFlowMixin, FlowViewMixin

class ReView(UpdateProcessView):
    model = Revisiones
    fields = ['revisor', 'observaciones_revisor']

Модель, в которой я хотел бы сохранить свои данные, это "Revisiones" и пользовательское представление, которым я являюсьс помощью ReView, но не сохранять на другой моей таблице.

1 Ответ

0 голосов
/ 19 февраля 2019

Все виды процессов, такие как CreateProcessView или UpdateProcessView в Django Viewflow, подключены к Модель процесса .Это означает, что представление и поток могут отслеживать метаданные, относящиеся к процессу, который добавляется при наследовании от Process модели.

В этом случае вы пытаетесь установить UpdateProcessViewмодели Revisiones, которая не наследуется от Process, а является просто обычной models.Model.

Вы пытаетесь установить ее неправильно, указав model=Revisiones, но если вы откроете UpdateProcessView класс, вы увидите следующий код:

@property
def model(self):
    """Process class."""
    return self.activation.flow_class.process_class

Как видите, модель всегда установлена ​​в класс Process для потока.

Вместо этого вам нужно будет сделать следующее:установите данные Revisiones другими способами.Возможно, вы создаете обработчик в своем потоке, который устанавливает эти данные на основе данных процесса, или, возможно, вы создаете методы переопределения для form_valid или другие методы View, где вы пишете пользовательскую логику для хранения этих вещей.

...