title: Adding db_table to model added a last_login field
body: <p>Background: I started a project with a custom User model. However, noob that I am, I was unaware of the AbstractBaseUser class. So I just wrote my own. The app has been deployed to prod and working fine. But now I want to switch to using AbstractBaseUser so I can take advantage of some of the built-in Django utilities (like the pre-made password resetting process). I had done this with a different app and it worked fine. But that one wasn't in prod while I made the change. Because this one is, I needed to keep the old user table while I made the changes with a copy of it. So my first step was to add <code>db_table = test_users</code> to my old user model, so as to keep the prod app running with an unchanged table. I ran the migration, and two unexpected things happened (I'm a noob, and that's why they were unexpected):</p>
  <ul>
  <li>The old user table was renamed. I thought a new table would be created. No problem, I quickly copied the new table and named the copy with the old table's name so the prod app could still find its users</li>
  <li>A column last_login was added. Why??
  Here's my model, with the added <code>db_table</code></li>
  </ul>
  <pre><code>
      class User(models.Model):
          first_name = models.CharField(max_length=255)
          last_name = models.CharField(max_length=255)
          email = models.CharField(max_length=255)
          password = models.CharField(max_length=255)
          created_at = models.DateTimeField(auto_now_add=True)
          updated_at = models.DateTimeField(auto_now=True)
          client_id = models.IntegerField(blank=True, null=True)
          is_admin = models.BooleanField(default=False)
          is_super = models.BooleanField(default=False)
          is_active = models.BooleanField(default=True)
      
          class Meta:
              db_table = &quot;test_users&quot;
  
  </code></pre>
  <p>The big problem with this is that when I change to <code>AbstractBaseUser</code> and run the migration, I get an error. Looking at the migration file I see that this change creates a migration that all it tries to do is to add <code>last_login</code> to the table. So, of course, the error I get is &quot;Duplicate column name 'last_login'&quot;</p>
  <p>So, my question is two-fold:</p>
  <ol>
  <li>Why was that column added in the first migration?</li>
  <li>If I just run <code>migrate --fake</code> and keep going, will it have unintended consequences? I thought this could be a good solution, given that the migration file shows nothing else is being done, and if the field already exists, then no harm done?</li>
  </ol>