Django Evert迁移自定义迁移

时间:2018-10-08 16:38:53

标签: django django-migrations

我目前正在为自定义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

似乎我无法在一次迁移中更新表,然后更改表架构。

你们对此有解决方案吗?

谢谢

0 个答案:

没有答案