title: Django signals - kwargs['update_fields'] is always None on model update via django admin
body: <p>I have a signal inside my django app where I would like to check if a certain field in my model has been updated, so I can then proceed and do something. </p>
  
  <p>My model looks like this...</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>My signal looks like this...</p>
  
  <pre><code>@receiver(post_save, sender=Product)
  def update_model(sender, **kwargs):
      instance = kwargs['instance']
      if 'tax_rate' in kwargs['update_fields']:
          # do something
  </code></pre>
  
  <p>This returns the error <code>None</code> is not an iterable. I have read the django signal documentation regarding the <code>update_fields</code> and it says <code>The set of fields to update as passed to Model.save(), or None if update_fields wasn’t passed to save().</code></p>
  
  <p>I should mention that I am working inside django admin here so what I hoped would happen is, I could create an instance of my Product model in django admin and then later if the value of tax_rate or price were updated, I could check for those and update the <code>list_price</code> accordingly. However, <code>kwargs['update_fields']</code> always returns None.
  What am I getting wrong? Or is there some other way I could achieve that result inside django admin?</p>
  
  <p><strong>Updated section</strong></p>
  
  <p>Now, say I introduce a field called <code>inputed_by</code> in my product model, that points to the user model and I want that field populated when the model is first saved. Then another field <code>updated_by</code> that stores the user who last updated the model. At the same time I wish to check whether either or both the <code>tax_rate</code> or <code>price</code> has been updated.</p>
  
  <p>Inside my model admin I have the following method...</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>My signal now looks like this...</p>
  
  <pre><code>@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']
  
      # Prints out the frozenset containing the updated fields and then below that `The update_fields is None`
  
      print(f'The update_fields is {updated}')
  
      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() 
  </code></pre>
  
  <p>I get the error <code>'NoneType' object is not iterable</code>
  The error seems to come from the line <code>set(checklist).issubset(updated)</code>. I've tried running that line specifically inside the python shell and it yields the desired results. What's wrong this time?</p>