'Start the purchase process.  This will set the order status to "paying",
at which point it should no longer be modified.
Future calls to `Order.get_cart_for_user()` will filter out orders with
status "paying", effectively creating a new (empty) cart.'

@transaction.atomic
def start_purchase(self):

    if (self.status == 'cart'):
        self.status = 'paying'
        self.save()
        for item in OrderItem.objects.filter(order=self).select_subclasses():
            item.start_purchase()
