我目前正在为自定义Django迁移而苦苦挣扎,更具体地说是要具有还原它的能力。
我有一个带有外键“ Subscription”的UserSubscription模型,该外键表示具有价格,名称,类型等的订阅。 UserSubscription跟踪我们的付款服务中发生的每个事件(上次付款,错误,付款日期等)
我的迁移删除了此订阅外键,并添加了一个新的UserConditionalOffer(用于跟踪具有促销或特价优惠的子项)
向前播放迁移效果很好,但是向后播放时,我需要删除UserConditionalOffer并使用默认值重新创建Subscription外键。
据我了解,Django会执行这些操作,但无法使用预订值重新填充表。
用户订阅模型:
class UserSubscription(models.Model):
user = models.ForeignKey(User, verbose_name = 'user', null = False, blank = False)
user_conditional_offer = models.ForeignKey(UserConditionalOffer, verbose_name = 'user conditional offer', null = False, blank = False)
...
# removed line : subscription = models.ForeignKey(Subscription, verbose_name = 'subscription', null = False, blank = False)
如您所见,订阅不能为空。因此,当Django还原此迁移时,它将在UserSubscription中创建一个字段订阅,但将其保留为空,则失败。
我只需要将订阅设置为1(默认订阅)
我尝试将Migrations.RunSQL与reverse_sql一起使用,但是我得到了:
cannot ALTER TABLE "vadom_billing_user_subscription" because it has pending trigger events
似乎我无法在一次迁移中更新表,然后更改表架构。
你们对此有解决方案吗?
谢谢