Nếu bạn chỉ có một loại người dùng và đang sử dụng Django 1.5+, tôi khuyên bạn nên tận dụng lợi thế của người dùng AbstractUser mới. Extending Django's default user
Như một ví dụ, nơi bạn muốn thêm ngày tháng năm sinh và màu sắc yêu thích:
#myusers/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class MyUser(AbstractUser):
dob = models.DateField()
favorite_color = models.CharField(max_length=32, default='Blue')
Nếu bạn cần linh hoạt hơn bạn có thể kéo dài tuổi AbstractBaseUser thay vì AbstractUser, nhưng đối với hầu hết các trường hợp cơ bản bạn chỉ nên cần AbstractUser.
Cũng lưu ý rằng trong cả hai trường hợp, bạn sẽ cần phải reference your user model by using settings.AUTH_USER_MODEL.
Sử dụng ra ví dụ trên và giả sử ứng dụng nó được quy định tại được gọi là myusers
:
#settings.py
AUTH_USER_MODEL = 'myusers.MyUser'
Phương pháp bạn đề cập đến việc tạo ra một mô hình sinh viên với một lĩnh vực one-to-one với mô hình tài khoản vẫn hoạt động , nhưng không sạch sẽ (vẫn còn những trường hợp có ý nghĩa nếu bạn có nhiều loại người dùng).
Tôi thường không thích tham khảo sách trong câu trả lời, nhưng tôi thấy rằng Two Scoops of Django's, Chương 16 trên mô hình Người dùng đã giải thích rõ hơn về nơi các tùy chọn khác nhau phù hợp với phiên bản hiện tại của Django trực tuyến tài liệu. Cuốn sách nói chung là một phần giới thiệu rất hữu ích cho Django và được viết dựa trên 1.5. Bạn sẽ phải mua cuốn sách hoặc tìm một người có nó, mặc dù ... (FYI: Tôi không nhận được bất kỳ tiền giới thiệu này).
Bạn cũng có thể xem câu hỏi/câu trả lời SO này: https://stackoverflow.com/a/14104748/307293
Điều gì không sạch về nó? –
Nó tạo thêm một bảng trong cơ sở dữ liệu. Nếu bạn đang tham khảo những thứ như tên và họ thường xuyên cùng với một số thông tin tùy chỉnh của bạn yêu cầu thêm JOIN mỗi lần. – Jacinda
Jacinda - tình cờ tôi đã mua cuốn sách sớm hơn hôm nay! Tôi chưa đến đó, nhưng nhìn vào tham chiếu đó, họ đưa ra ba lựa chọn tốt: liên kết ngược lại từ một mô hình liên quan, lớp con AbstractUser, hoặc lớp con AbstractBaseClassUser. Thật không may tôi đang sử dụng một ứng dụng của bên thứ ba mà tôi muốn phân lớp, bất kỳ ý tưởng về làm thế nào để làm điều này? – Joker