2017-12-28 15 views
0

So arbeite ich an der Implementierung eines benutzerdefinierten Benutzermodells, und ich folgte Tutorial 'this Tutorial.Django abstrakte Benutzermodell nicht migriert

Dies sind die Modelle:

class UserManager(BaseUserManager): 
    """Define a model manager for User model with no username field.""" 

    use_in_migrations = True 

    def _create_user(self, email, password, **extra_fields): 
     """Create and save a User with the given email and password.""" 
     if not email: 
      raise ValueError('The given email must be set') 
     email = self.normalize_email(email) 
     user = self.model(email=email, **extra_fields) 
     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_user(self, email, password=None, **extra_fields): 
     """Create and save a regular User with the given email and password.""" 
     extra_fields.setdefault('is_staff', False) 
     extra_fields.setdefault('is_superuser', False) 
     return self._create_user(email, password, **extra_fields) 

    def create_superuser(self, email, password, **extra_fields): 
     """Create and save a SuperUser with the given email and password.""" 
     extra_fields.setdefault('is_staff', True) 
     extra_fields.setdefault('is_superuser', True) 

     if extra_fields.get('is_staff') is not True: 
      raise ValueError('Superuser must have is_staff=True.') 
     if extra_fields.get('is_superuser') is not True: 
      raise ValueError('Superuser must have is_superuser=True.') 

     return self._create_user(email, password, **extra_fields) 


class User(AbstractUser): 
    """User model.""" 

    username = None 
    email = EmailField(_('email address'), unique=True) 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = [] 

    objects = UserManager() 

ich jetzt laufen python3 manage.py migrate versuche und ich bekomme diese Fehlermeldung:

[wtreston] ~/gdrive/mysite2/ $ python3 manage.py migrate 
Operations to perform: 
    Apply all migrations: admin, auth, contenttypes, reviews, sessions, users 
Traceback (most recent call last): 
    File "manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line 
    utility.execute() 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute 
    output = self.handle(*args, **options) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 164, in handle 
    pre_migrate_apps = pre_migrate_state.apps 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/migrations/state.py", line 218, in apps 
    return StateApps(self.real_apps, self.models) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/migrations/state.py", line 295, in __init__ 
    raise ValueError("\n".join(error.msg for error in errors)) 
ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'users.user', but app 'users' doesn't provide model 'user'. 
The field reviews.Answer.student was declared with a lazy reference to 'users.user', but app 'users' doesn't provide model 'user'. 
The field reviews.ReviewBlock.teacher was declared with a lazy reference to 'users.user', but app 'users' doesn't provide model 'user'. 
The field users.Student.user was declared with a lazy reference to 'users.user', but app 'users' doesn't provide model 'user'. 
The field users.Teacher.user was declared with a lazy reference to 'users.user', but app 'users' doesn't provide model 'user'. 

In meinem settings.py ich diese Linie AUTH_USER_MODEL = 'users.User' haben. und wenn ich die AUTH_USER_MODEL mit ForeignKeys referenziere, habe ich zuerst und dann ForeignKey(settings.AUTH_USER_MODEL)

Jede Hilfe wäre hilfreich! Dank

+0

'users.User' hat' abstract = True'? – schwobaseggl

+0

@schwobaseggl hat die zwei Modelle hinzugefügt, die ich benutze, da ich nicht sicher bin, was du meinst? – wtreston

+0

Wie sieht Ihre Migrationsdatei aus? – Jason

Antwort

0

Sie haben AbstractUser für Ihre individuelle Benutzermodell geerbt und Sie erben BaseUserManager für UserManager ändern Sie Ihre Manager wie unten durch UserManager vererben:

class MyUserManager(UserManager): 
    def create_user(self, email, password=None, **kwargs): 
     # override this method 

    def create_superuser(self, email, password, **kwargs): 
     # override this method 

aufzuräumen Migrationen und Datenbank zuerst und dann anwenden Migration mit diesem Änderungen.

+0

Was meinst du mit 'Säuberungen Migrationen und Datenbank zuerst und dann die Migration mit diesen Änderungen anwenden.'Ich kann die letzte Migration löschen, aber ich weiß nicht, was Sie meinen, durch Säuberung der Datenbank – wtreston

+0

Reinigung Migrationen werden keine löschen vorhandene erstellte Tabelle in der Datenbank. für einfach können Sie alle Tabellen der Datenbank löschen .. wie Neuanfang – Gahan

+0

OK Ich tat das und es funktionierte – wtreston

Verwandte Themen