2013-03-27 30 views
9

Tôi đang cố gắng sử dụng trường email trong mô hình người dùng Django mặc định làm tên người dùng. Tôi đang sử dụng Django 1.5 và tôi thấy rằng người dùng mặc định có thuộc tính USERNAME_FIELD.Tôi có thể thay đổi USERNAME_FIELD trong Django 1.5 mà không cần tạo người dùng tùy chỉnh không?

Trong dự án của tôi, tôi muốn đặt USERNAME_FIELD = 'email' sau làm mặc định trong mô hình người dùng.

Tinh chỉnh nhỏ nhưng cơ bản này là điều duy nhất tôi muốn thay đổi trong mô hình người dùng. Tôi đã tự hỏi nếu có một cách để thay đổi các USERNAME_FIELD mà không cần phải phân lớp AbstractUser. Tôi đã thấy trong this question mà bạn có thể phân lớp AbstractUser và viết một trình quản lý tùy chỉnh cho nó.

Vì vậy, tôi đã tự hỏi nếu có một cách đơn giản hơn để thay đổi thuộc tính đó?

Và nếu không, điều gì sẽ là cách tối thiểu để mở rộng AbstractUser để sử dụng trường email làm tên người dùng?

+0

sử dụng AbstraceBaseUser thay vì – catherine

+0

@catherine Nếu bạn sử dụng Abstractclasser bạn kết thúc trong những vấn đề sau: http: //stackoverflow.com/questions/16605453/django-1-5-extend- the-default-user-model-hoặc-replace-it và http://stackoverflow.com/questions/16601412/upgrading-django-to-1-5-with-django-cms-user-model-issue – Daviddd

Trả lời

4
#Your app's __init__.py 

from django.contrib.auth.models import User 

User.USERNAME_FIELD = 'email' 
+6

Điều này đặt ra lỗi "django.core.management.base.CommandError: Một hoặc nhiều mô hình đã không xác thực: auth.user: Trường được đặt tên là USERNAME_FIELD không được bao gồm trong REQUIRED_FIELDS trên mô hình Người dùng có thể thay đổi. auth.user: The USERNAME_FIELD phải là duy nhất. Thêm duy nhất = Đúng với thông số trường. " cho tôi. – Martey

+0

Cùng một vấn đề với tôi ... Tôi tự hỏi liệu có bất kỳ thay đổi nào phá vỡ điều này giữa tháng 3 '13 và tháng 5 'hay không. Tôi đã thực sự thích điều này để làm việc .. – user1496984

1

Bạn phải viết một mới Tuỳ chỉnh tài Class bằng cách mở rộng AbstractBaseUser và không AbstractUser

Khai báo email của bạn làm USERNAME_FIELD có

tùy ý bạn cũng có thể tuyên bố một người quản lý người sử dụng tùy chỉnh mà kéo dài từ BaseUserManager để xử lý ràng buộc yêu cầu tên người dùng. Bạn có thể xóa tên người dùng khỏi chức năng create_user của người quản lý đó