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

、 、 の 3 つの直線的なステップを持つ標準的なワークフローを実装する必要がSelect Plan & PreferenceありPersonal InformationますReview & Payment

プランとプリファレンスの選択 : クライアントは、1 つのプランといくつかのクラフト製品を選択できます。

個人情報: クライアントは、住んでいる場所、電話番号、名、姓、電子メールなどに関連するフィールドに入力します...

レビューと支払い: 必要に応じてアカウントを作成し、注文を確認し、現在の注文に関連する支払いを行います。

大まかに言えば、支払いが受け入れられた場合 (e コマースなど)、ワークフローの最後のステップでアカウントと注文が記録されます。したがって、移行中は情報をデータベースに保存したくありません。移行中に一時的に情報を記録するにはどうすればよいですか? その情報を一時的に保存できる場合、支払いが受け入れられたら、どうすればその情報をデータベースに保存できますか? 支払いはワークフローの最後のステップであることに注意してください。

アップデート

ユーザーの情報を保存したくないので、キャッシュに入れます。ユーザー情報辞書を一定期間保存します。キャッシュのキーは、買い注文である可能性があります。または、個人情報から何かを使用できます。キャッシュのキーが必要です。

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