我的django应用程序内部有一个信号,我想检查模型中的一个或两个字段是否已更新,因此在保存模型之前,我可以继续进行计算display_price
。
我还希望在更新price
或tax_rate
时,再次计算display_price
的值。
我的模特看起来像这样...
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.PositiveIntegerField()
tax_rate = models.PositiveIntegerField()
display_price = models.PositiveInteger()
inputed_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL)
updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL)
在我的模型管理员中,我有以下方法...
def save_model(self, request, obj, form, change):
update_fields = []
if not obj.pk:
obj.inputed_by = request.user
elif change:
obj.updated_by = request.user
if form.initial['tax_rate'] != form.cleaned_data['tax_rate']:
update_fields.append('tax_rate')
if form.initial['price'] != form.cleaned_data['price']:
update_fields.append('price')
obj.save(update_fields=update_fields)
super().save_model(request, obj, form, change)
我的信号看起来像这样...
@receiver(post_save, sender=Product, dispatch_uid="update_display_price")
def update_display_price(sender, **kwargs):
created = kwargs['created']
instance = kwargs['instance']
updated = kwargs['update_fields']
checklist = ['tax_rate', 'price']
if created:
instance.display_price = instance.price+instance.tax_rate
instance.save()
elif set(checklist).issubset(updated):
instance.display_price = instance.price+instance.tax_rate
instance.save()
我收到错误“ NoneType”对象不可迭代的错误。该错误似乎来自set(checklist).issubset(updated)行。我试过专门在python shell中运行该行,它会产生所需的结果。我在做什么错了?
请注意,我之前曾问过这个问题,答案很好,但是后来我更新了问题,但从未得到解决问题的方法。 Django signals - kwargs['update_fields'] is always None on model update via django admin