title: Using __new__ on classes derived from Django's models does not work
body: <p>This is something which is puzzling me, but I cannot get a definitive answer. Using the <code>__new__</code> method (or more accurately, static method) within classes derived from DJango model.</p>
  
  <p>This is how <code>__new__</code> should be ideally used (since we are using Django, we can assume that version 2.x of python is being used):</p>
  
  <pre><code>class A(object):
    def __new__(self, *args, **kwargs):
      print ("This is A's new function")
      return super(A, self).__new__(self, *args, **kwargs)
  
    def __init__(self):
      print ("This is A's init function")
  </code></pre>
  
  <p>Instantiating an object from the above class works as expected. Now, when one tries something like this on classes derived from Django models, something unexpected happens:</p>
  
  <pre><code>class Test(models.Model):
    def __new__(self, *args, **kwargs):
      return super(Test, self).__new__(self, *args, **kwargs)
  </code></pre>
  
  <p>Instantiating an object from the above class results in this error: <code>
  TypeError: unbound method __new__() must be called with Test instance as first argument (got ModelBase instance instead)</code>.</p>
  
  <p>I can't understand why this is happening (although I know some class magic is happening behind the scenes due to the Django framework).</p>
  
  <p>Any answers will be appreciated.</p>