2012-10-16 3 views
53

Tôi có một vấn đề. Trong Django Tôi tạo ra một mô hình mới:Django: nhập người dùng xác thực vào mô hình

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 

Nhưng nó không hoạt động: ImportError: cannot import name user

Làm thế nào để sửa chữa nó?

Vì vậy, tôi muốn tạo bảng "công nhân" mới trong db, có mối quan hệ OneToOne với bảng "auth_user". Cảm ơn.

Trả lời

131
from django.contrib.auth.models import User 

Bạn đã bỏ lỡ các mô hình - và người dùng được viết hoa.

Nếu bạn sử dụng một mô hình người dùng tùy chỉnh, bạn nên sử dụng:

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

Thông tin chi tiết có thể được tìm thấy trong docs.

Thay đổi trong Django 1.11:

Khả năng gọi get_user_model() vào thời điểm nhập khẩu đã được bổ sung.

+0

thanks a lot nhưng trên doc của django nó nói không có nơi mô hình https://docs.djangoproject.com/en/dev/ref/contrib/auth/ BTW Cảm ơn một lần nữa. – BlaShadow

61

Nếu bạn đang sử dụng một mô hình tài khoản tùy chỉnh, làm như sau để tham khảo nó:

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

Hoặc nếu sử dụng nó trong chính nước ngoài hoặc nhiều-nhiều mối quan hệ:

from django.conf import settings 
.... 
user = models.ForeignKey(settings.AUTH_USER_MODEL) 

docs

+6

Điều này đúng hơn so với câu trả lời được chấp nhận vì nó có thể di động hơn. – Groady

1

Để giữ mã của bạn chung, hãy sử dụng phương pháp get_user_model() để truy xuất mô hình người dùng và AUTH_USER_MODEL cài đặt để tham chiếu đến nó khi xác định mối quan hệ của mô hình với mô hình người dùng, thay vì tham chiếu trực tiếp đến mô hình người dùng auth.

ref: Django By Example Sách

0

AUTH_USER_MODEL là một giải pháp tốt. đây là giải pháp hoàn chỉnh theo câu hỏi.

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