我在寻找一种方法来改变历史记录中的额外字段。在
我有一个模型Invoice
和{
class UserBalanceHistoricalModel(models.Model):
invoice = models.ForeignKey('Invoice', null=True, blank=True, on_delete=models.SET_NULL,
verbose_name='Faktúra')
class Meta:
abstract = True
class UserBalance(TimeStampedModel):
objects = UserBalanceManager()
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
related_name='user_balance', verbose_name='Užívateľ')
balance = models.DecimalField(max_digits=12, decimal_places=2, default=0, verbose_name="Eur na konte")
history = HistoricalRecords(bases=[UserBalanceHistoricalModel, ])
class Invoice(models.Model):
...
每次创建Invoice
对象时,UserBalance.balance
都会被修改并自动创建历史记录。在
我想将这个Invoice
对象添加到历史记录中,但它不起作用。invoice_id
是None
。在
你知道我做错了什么吗?在
balance.history
正在访问平衡的HistoryManager
类,它本质上是历史模型的管理器,而不是历史模型实例本身。因此,balance.history.invoice = i
行只是在manager类上设置一个局部变量,这没有任何效果。在使用balance.save()
保存balance之前,不会创建实际的历史模型实例。您要做的是访问pre_create_historical_record
信号,它是在保存balance
之后,在保存历史实例之前发送的。这是有记录的here。在对于您的用例,您可以为
pre_create_historical_record
信号设置一个接收器,它接受history_instance
并用您想要的任何值编辑invoice
字段。您可以在基本对象上传递invoice,然后按如下方式删除它:上面的代码如下所示:
^{pr2}$相关问题 更多 >
编程相关推荐