Django: import auth user to the model

DjangoDjango Models

Django Problem Overview


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".

Django Solutions


Solution 1 - Django

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.

Solution 2 - Django

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)

docs

Solution 3 - Django

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

Solution 4 - Django

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLeonView Question on Stackoverflow
Solution 1 - DjangoThomas SchwärzlView Answer on Stackoverflow
Solution 2 - DjangoCianan SimsView Answer on Stackoverflow
Solution 3 - DjangoArun V JoseView Answer on Stackoverflow
Solution 4 - DjangoharishkbView Answer on Stackoverflow