2010-09-04 31 views
8

Django theo mặc định sẽ tạo trường khóa chính trên mỗi mô hình có tên "id", với loại AutoField. Trên các mô hình của tôi, tôi ghi đè điều này để sử dụng tùy chỉnh UUIDField làm khóa chính bằng cách sử dụng thuộc tính "primary_key". Tôi cũng thích mô hình User trong django.contrib.auth để có một khóa chính là UUIDField, nhưng điều này dường như không thể thực hiện được nếu không thay đổi mã nguồn mô hình User.Mô hình người dùng django và trường khóa chính tùy chỉnh

Có cách nào được đề xuất để tiếp cận vấn đề này không?

Trả lời

6

điều này dường như không thể thực hiện được nếu không thay đổi mã nguồn mô hình Người dùng.

Đúng. Trừ khi bạn sẵn sàng thay đổi (hoặc thay thế) User thì không có cách nào.

Cách một (mười lăm, hackish) để thực hiện việc này là đính kèm UserProfile cho mỗi trường hợp User. Mỗi User phải có chính xác mộtUserProfile. Sau đó, bạn có thể thêm UUIDField vào hồ sơ. Bạn sẽ vẫn phải thực hiện truy vấn tùy chỉnh để dịch từ UUIDField sang id.

Nếu bạn không thích tên UserProfile bạn có thể đổi tên phù hợp. Điều quan trọng là bạn có mối quan hệ một-một với User.

+0

Tôi đã tìm ra trường hợp đó. Cảm ơn. – Andrew

4

Với việc phát hành Django 1.5, các backend xác thực bây giờ hỗ trợ mô hình người dùng tùy chỉnh:

https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

Một lĩnh vực email có thể được sử dụng như là lĩnh vực tên truy cập và lập luận primary_key thể được đặt trên nó:

class CustomUser(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(max_length=254, unique=True, db_index=True, primary_key=True) 

    USERNAME_FIELD = 'email' 
Các vấn đề liên quan