2

我正在研究创建订单的工作流程。这是我到目前为止得到的

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)

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

4

0 回答 0