Django: nhập người dùng xác thực vào mô hình


83

Tôi có một vấn đề. Trong Django, tôi đã tạo một mô hình mới:

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 một bảng mới OneToOne"worker" trong db, có mối quan hệ với bảng "auth_user". Cảm ơn.

Câu trả lời:


193
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ô 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 tài liệu .

Đã thay đổi trong Django 1.11:

Khả năng gọi get_user_model () tại thời điểm nhập đã được thêm vào.


cảm ơn rất nhiều nhưng trên tài liệu của django nó nói không có mô hình docs.djangoproject.com/en/dev/ref/contrib/auth BTW Cảm ơn một lần nữa.
BlaShadow

73

Nếu bạn đang sử dụng mô hình Người dùng tùy chỉnh, hãy làm như sau để tham chiếu mô hình đó:

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

Hoặc nếu sử dụng nó trong khóa ngoại hoặc quan hệ nhiều-nhiều:

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

tài liệu


6
Câu này đúng hơn câu trả lời được chấp nhận vì nó dễ di động hơn.
Will

3

AUTH_USER_MODELlà 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

1

Để giữ cho mã của bạn chung chung, hãy sử dụng get_user_model()phương pháp để truy xuất mô hình người dùng và AUTH_USER_MODELcà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 xác thực.

ref: Django Theo Sách Ví dụ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.