Django auth model Error: name 'User' is not defined

24,125

You are referencing User here: author = models.ForeignKey(User), but forgot to import User in your models.py

Put this at the top of your models.py file

from django.contrib.auth.models import User

EDIT:

An alternate (newer) way of importing user model - for configurable user models would be:

from django.contrib.auth import get_user_model
User = get_user_model()

The configured User model returned would be based on the setting AUTH_USER_MODEL

Share:
24,125
Thankyou
Author by

Thankyou

Updated on July 09, 2022

Comments

  • Thankyou
    Thankyou almost 2 years

    1. The error codes:

    NameError: name 'User' is not defined

    >>> myproject ME$ python manage.py shell
    NameError: name 'User' is not defined
    myproject ME$ python manage.py shell
    Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
    [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from django.contrib.auth.models import User
    >>> user = User.objects.create_user('john', '[email protected]', 'johnpassword')
    >>> user.is_staff = True
    >>> user.save()
    >>> User.objects.all()
    [<User: superuser>, <User: john>]
    >>> from django.db import models
    >>> from django.contrib.auth.models import User
    >>> 
    >>> 
    >>> from django.conf import settings
    >>> user = models.ForeignKey(settings.AUTH_USER_MODEL)
    >>> User.objects.all()
    [<User: superuser>, <User: john>]
    >>> user.save()
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    AttributeError: 'ForeignKey' object has no attribute 'save'
    >>> from django.conf import settings
    

    Do you have suggestions?

    What can I do?

    Is there a way to check whether the user auth model was imported? If yes, what can I do in case it was not correctly imported?

    Is there a problem with my bookmarks app?

    2. My models.py:

    from django.db import models
    
    class Bookmark(models.Model):
        author = models.ForeignKey(User)
        title = models.CharField(max_length=200, blank=True, default="")
        url = models.URLField()
        timestamp = models.DateTimeField(auto_now_add=True)
    
        def __unicode__(self):
            return "%s by %s" % (self.url, self.author.username)
    
    class Tag(models.Model):
        bookmarks = models.ManyToManyField(Bookmark)
        slug = models.CharField(max_length=50, unique=True)
    
        def __unicode__(self):
            return self.slug