Проверяя наличие обновлений одного или нескольких полей с помощью kwargs ['update_fields'], NoneType не повторяет сигналы django - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть сигнал внутри моего приложения 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' объект неiterable Ошибка, похоже, исходит из набора строк (контрольный список) .issubset (обновлено).Я попытался запустить эту строку специально внутри оболочки Python, и она дает желаемые результаты.Что я делаю не так?

Обратите внимание, что я задавал этот вопрос раньше, и ответ был хорошим, но потом я обновил вопрос и так и не получил решения своей проблемы. Сигналы Django - kwargs ['update_fields'] всегда отсутствует при обновлении модели через администратора django

...