我正在制作一个创建订单的工作流程。这是我到目前为止所得到的
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 & Preference
,Personal Information
和Review & Payment
。
选择计划&偏好:客户可以选择一个计划以及一些工艺产品。
个人信息:客户将填写与其居住地相关的字段,电话号码,名字,姓氏,电子邮件,......
评论&付款:如有必要,请创建一个帐户,查看他/她的订单并进行与当前订单相关的付款。
粗略地说,如果付款被接受(即电子商务),则会在工作流程的结束步骤记录帐户和订单。因此,在过渡期间,我不希望将信息保存在我的数据库中。如何在过渡期间临时记录信息?如果我可以暂时存储该信息,那么在接受付款后如何将信息保存在数据库中?请注意,付款是工作流程的最后一步。
我不想保存用户的信息,我会把它放在缓存中。将用户信息字典保存一段时间。缓存的关键可能是购买订单,或者我可以使用来自个人信息的东西,我需要一个缓存密钥。
cache.set('user_{}'.format(buy_order), {userdata}, 3600) # one hour
然后,当我保存信息时,在最后一步我可以得到字典。
user_data = cache.get('user_{}'.format(buy_order))
User.objects.create(**user_data)
我找到了解决方案,但我不知道这是否是最佳解决方案。一般来说,我知道跟踪这些信息是相关的,但我受到该项目的预算(即存储,性能......)的限制,所以我无法做到。