Reputation: 6554
In Django I created a new model:
from django.db import models
from django.contrib.auth import user
class Workers(models.Model):
user = models.OneToOneField(User, primary_key=True)
work_group = models.CharField(max_length=20)
card_num = models.IntegerField()
def __unicode__(self):
return self.user
But it doesn't work: ImportError: cannot import name user
How to fix it?
I want to create a new table "workers" in db, which has a OneToOne
relationship with table "auth_user".
Upvotes: 98
Views: 111468
Reputation: 3389
AUTH_USER_MODEL
is a good solution. here is the complete solution as per the question.
from django.db import models
from django.conf import settings
class Workers(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
work_group = models.CharField(max_length=20)
card_num = models.IntegerField()
def __unicode__(self):
return self.user.id
Upvotes: 5
Reputation: 9917
from django.contrib.auth.models import User
You missed the models - and user is capitalized.
If you use a custom user model you should use:
from django.contrib.auth import get_user_model
User = get_user_model()
More details can be found in the docs.
Changed in Django 1.11:
The ability to call get_user_model() at import time was added.
Upvotes: 231
Reputation: 406
In order to keep your code generic, use the get_user_model()
method to retrieve the user model and the AUTH_USER_MODEL
setting to refer to it when defining model's relations to the user model, instead of referring to the auth user model directly.
ref: Django By Example Book
Upvotes: 3
Reputation: 3429
If you're using a custom User model, do the following to reference it:
from django.contrib.auth import get_user_model
User = get_user_model()
Or if using it in foreign key or many-to-many relations:
from django.conf import settings
....
user = models.ForeignKey(settings.AUTH_USER_MODEL)
Upvotes: 84