Opened 9 years ago
Closed 9 years ago
#26737 closed Bug (invalid)
models.EmailField(unique=True) in custom AbstractBaseUser throws auth.E003 during makemigrations
Reported by: | Matthew Miller | Owned by: | nobody |
---|---|---|---|
Component: | Core (Management commands) | Version: | 1.9 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I'm trying to implement a custom AbstractBaseUser to replace the default User class. For the most part I'm following the implementation detailed here, with some additional fields and nothing for REQUIRED_FIELDS:
class Account(AbstractBaseUser): email = models.EmailField(unique=True, db_index=True) # ...snip... USERNAME_FIELD = 'email'
Unfortunately when I run manage.py makemigrations I see the following error:
pbapi.Account: (auth.E003) 'Account.email' must be unique because it is named as the 'USERNAME_FIELD'.
I can suppress this error with the following:
SILENCED_SYSTEM_CHECKS = ['auth.E003']
This allows makemigrations to proceed, but I get the following output for the email field:
class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Account', fields=[ # ...snip... ('email', models.EmailField(max_length=254)),
When I modify the above migration output by hand to include unique=True:
fields=[ # ...snip... ('email', models.EmailField(max_length=254, unique=True)),
The next time I run makemigrations Django creates a migration that removes that constraint:
operations = [ migrations.AlterField( model_name='account', name='email', field=models.EmailField(max_length=254), ), ]
I'm not really sure what the culprit is. I've used this exact custom class before in earlier versions of Django without issue (the latest Django I can remember trying this in was 1.8), but for some reason Django 1.9 hates this class. Am I doing something wrong?
Change History (2)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
I'm embarrassed to say this but the cause was strictly PEBKAC. I'd accidentally redefined the email field further down in the model as just a plain EmailField. Removing that fixed the issue.