У меня есть сигнал внутри моего приложения 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