我正在研究创建订单的工作流程。这是我到目前为止得到的
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)
我找到了该解决方案,但我不知道它是否是最佳解决方案。一般来说,我知道继续跟踪该信息是相关的,但是我受到该项目的预算(即存储、性能等)的限制,所以我做不到。