使用kwargs ['update_fields']检查一个或多个字段的更新,NoneType不是可迭代的django信号

时间:2019-02-12 19:07:10

标签: django django-admin django-signals

我的django应用程序内部有一个信号,我想检查模型中的一个或两个字段是否已更新,因此在保存模型之前,我可以继续进行计算display_price。 我还希望在更新pricetax_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

0 个答案:

没有答案