暂时录制到永久

时间:2017-12-27 21:55:01

标签: django transitions django-fsm

我正在制作一个创建订单的工作流程。这是我到目前为止所得到的

from django.db import models
from django.utils.translation import ugettext_lazy as _

from django_fsm import FSMField, transition

from ev5.core.models import TimeStampedModel


class Order(TimeStampedModel):
    STATE_CHOICES = (
        ('start', _('Start')),
        ('received', _('Received')),
        ('completed', _('Completed')),
        ('approved', _('Approved')),
    )
    date_order = models.DateTimeField(_('Order date'))
    customer = models.ForeignKey('customers.Customer')
    state = FSMField(...)

    def get_id_display(self):
        return '#{0.8d}'.format(self.pk)

    def __str__(self):
        return _('Order {} ({})').format(self.get_id_display(),
                                         self.get_state_display())

    @transition(field=state, source='start', target='received')
    def received(self):
        pass

    @transition(field=state, source='placed', target='completed')
    def completed(self):
        pass

    @transition(field=state, source='completed', target='approved')
    def approved(self):
        pass

我需要使用三个线性步骤实施标准工作流程,即Select Plan & PreferencePersonal InformationReview & Payment

选择计划&偏好:客户可以选择一个计划以及一些工艺产品。

个人信息:客户将填写与其居住地相关的字段,电话号码,名字,姓氏,电子邮件,......

评论&付款:如有必要,请创建一个帐户,查看他/她的订单并进行与当前订单相关的付款。

粗略地说,如果付款被接受(即电子商务),则会在工作流程的结束步骤记录帐户和订单。因此,在过渡期间,我不希望将信息保存在我的数据库中。如何在过渡期间临时记录信息?如果我可以暂时存储该信息,那么在接受付款后如何将信息保存在数据库中?请注意,付款是工作流程的最后一步。

更新

我不想保存用户的信息,我会把它放在缓存中。将用户信息字典保存一段时间。缓存的关键可能是购买订单,或者我可以使用来自个人信息的东西,我需要一个缓存密钥。

cache.set('user_{}'.format(buy_order), {userdata}, 3600) # one hour

然后,当我保存信息时,在最后一步我可以得到字典。

user_data = cache.get('user_{}'.format(buy_order))
User.objects.create(**user_data)

我找到了解决方案,但我不知道这是否是最佳解决方案。一般来说,我知道跟踪这些信息是相关的,但我受到该项目的预算(即存储,性能......)的限制,所以我无法做到。

0 个答案:

没有答案
相关问题