title: How to set django model field value based-on value of other field in the same Model
body: <p>I want to assign a <code>NullBooleanField</code> value to always oppose other field value in the same model, except for <code>None</code>. From models below, i want to make sure if the value of <code>scam</code> is <code>True</code>, the value of <code>whitelist</code> can not also be <code>True</code>. But if <code>scam</code> is <code>None</code>, <code>whitelist</code> allowed to also set to <code>None</code>. The expected criteria is one of the followings:</p>
  
  <ol>
  <li>If <code>scam</code> is <code>True</code>, the allowed value of <code>whitelist</code> is <code>False</code> or <code>None</code></li>
  <li>If <code>scam</code> is <code>False</code>, the allowed value of <code>whitelist</code> is <code>True</code> or <code>None</code></li>
  <li>If <code>scam</code> is <code>None</code>, the allowed value of <code>whitelist</code> is <code>True</code> or <code>False</code> or <code>None</code></li>
  </ol>
  
  <p>So, how to make sure <code>scam</code> is always the opposite of <code>whitelist</code>?</p>
  
  <p>This is my class model:</p>
  
  <pre><code>class ExtendHomepage(models.Model):
      "extending homepage model to add more field"
      homepage = models.OneToOneField(Homepage)
  
      # True if the website is a scam, False if not, None if not sure
      scam = models.NullBooleanField(blank=True, null=True)
  
      # True if the webpage is already inspected, False if not 
      inspected = models.BooleanField(default=False)
  
      # True if the website is already reported, False if not yet 
      reported =  models.NullBooleanField(blank=True, null=True)
  
      # True if the website response is 200, else it is False
      access =  models.BooleanField(default=True)
  
      # True if the web should be whitelist, False if should not, None pending
      whitelist =  models.NullBooleanField(blank=True, null=True)
  </code></pre>