2010-05-22 47 views
17

Tôi đang sử dụng hàm create_user() mà Django cung cấp để tạo người dùng của tôi. Ngoài ra tôi muốn lưu trữ thông tin bổ sung về người dùng. Vì vậy, tôi thử làm theo các hướng dẫn được đưa ra tạiThêm trường tùy chỉnh cho người dùng trong django

http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

nhưng tôi không thể có được nó để làm việc cho tôi. Có hướng dẫn từng bước mà tôi có thể làm theo để làm việc này cho tôi không?

Ngoài ra, khi tôi đã thêm các trường tùy chỉnh này, tôi rõ ràng sẽ cần phải thêm/chỉnh sửa/xóa dữ liệu từ chúng. Tôi dường như không thể tìm thấy bất kỳ hướng dẫn nào về cách thực hiện điều này.

+1

vì vậy * bạn * là hàm Django create_user()? :) –

+1

Tôi nghĩ rằng tôi đã được nhưng tiếc là tôi không: (.... Chỉ cần một con người cũ thường xuyên .. Cảm ơn cho rìu chỉnh ngữ pháp. Bất kỳ ý tưởng về làm thế nào để giải quyết vấn đề thực tế của tôi? –

Trả lời

-1

Nó chỉ là một mô hình khác. Bạn thao tác nó chính xác giống như cách bạn thao tác với mọi mô hình khác mà bạn gặp phải.

16

Tôi không biết từng bước một (mặc dù tôi chắc chắn một google chắc chắn sẽ tạo ra thứ gì đó). Nhưng đây là một cách nhanh chóng đi vào nó.

1) Tạo mô hình UserProfile để giữ thông tin bổ sung và đặt nó vào models.py. Nó có thể giống như thế này:

class UserProfile(models.Model): 
    #required by the auth model 
    user = models.ForeignKey(User, unique=True) 
    middle_name = models.CharField(max_length=30, null=True, blank=True) 

2) Nói settings.py của bạn về lớp mới bằng cách thêm dòng này (với tên thích hợp):

AUTH_PROFILE_MODULE = "myapp.UserProfile" 

3) Thêm một người biết lắng nghe tín hiệu để tạo ra một trống UserProfile ghi lại khi người dùng mới được thêm vào. Bạn có thể tìm thấy một đoạn trích tuyệt vời với chỉ đường here.

4) Khi xử lý bản ghi người dùng mới, bạn cũng có thể điền bản ghi UserProfile. Dưới đây là cách tôi làm các việc chèn (chú ý get_profile):

if (form.is_valid()): 
    cd = form.cleaned_data 
    user = User.objects.create_user(cd["UserName"], cd["Email"], cd["Password"]) 
    user.first_name = cd["FirstName"] 
    user.last_name = cd["LastName"] 
    user.save() 
    #Save userinfo record 
    uinfo = user.get_profile() 
    uinfo.middle_name = cd["MiddleName"] 
    uinfo.save() 

Đó là tất cả là để có nó. Đây không phải là toàn diện, nhưng nên chỉ cho bạn đi đúng hướng.

Cập nhật: Xin lưu ý rằng AUTH_PROFILE_MODULE bị phản đối kể từ v1.5: https://docs.djangoproject.com/en/1.5/ref/settings/#auth-profile-module

+0

Tôi đã thử điều đó. nhận và báo lỗi cho biết đối tượng 'NoneType' không có thuộc tính '_default_manager'. –

+3

Đã thử những gì cụ thể? Bạn gặp phải lỗi đó ở đâu? –

+0

Tạo một tệp có tên UserProfile.py.Thêm mã được yêu cầu.Thay đổi được thực hiện trong settings.py (AUTH_PROFILE_MODULE = 'app.UserProfile') Tôi gặp lỗi khi cố gắng lưu tên đệm ở dòng uinfo = user.get_profile() –

7

Tôi biết Đó là quá muộn và Django đã thay đổi rất nhiều kể từ đó, nhưng chỉ dành riêng cho những người tìm kiếm,

Theo Django documentation nếu bạn hài lòng với mô hình người dùng và chỉ muốn thêm một số trường bổ sung, làm những:

1- models.py của bạn nên được như thế này:

from django.contrib.auth.models import AbstractUser 
class CustomUser(AbstractUser): 
    mobile = models.CharField(max_length=16) 
    # if your additional field is a required field, just add it, don't forget to add 'email' field too. 
    # REQUIRED_FIELDS = ['mobile', 'email'] 

2- tiện ích này để setting.py

AUTH_USER_MODEL = 'myapp.CustomUser' 
các

đã hoàn tất!

Bây giờ bạn có thể chạy python manage.py syncdb

+2

Giải pháp này hoạt động tốt, nhưng tôi không khuyên bạn nên sử dụng vì nhiều thư viện không sử dụng biến 'AUTH_USER_MODEL' và giả sử bạn sử dụng Đối tượng 'User'. – db0

15

Các recommended way là để tạo ra một mô hình mới và cung cấp cho nó một OneToOneField() với built-in User mô hình như vậy:

class Student(models.Model): 
    user = models.OneToOneField(User) 
    college = models.CharField(max_length=30) 
    major = models.CharField(max_length=30) 

, vv

Sau đó, bạn có thể truy cập các trường như sau:

user = User.objects.get(username='jsmith') 
college = user.student.college 
+0

Đối với tôi, điều này tạo ra lỗi lập trình khi tôi tạo người dùng mới và cố gắng truy cập: "auth_student" không thoát. –

+1

Kiểm tra liên kết này, https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#extending-the-existing-user-model đây là phiên bản mới hơn –

Các vấn đề liên quan