Tôi đã mở rộng mô hình người dùng django 1.5 như dưới đây và tôi đang gặp sự cố khi tôi chèn bất kỳ hàng nào vào cơ sở dữ liệu. Tệp models.py của tôi trông giống như dưới đây.mô hình người dùng tùy chỉnh trong django 1.5
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=MyUserManager.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(email,
password=password
)
user.is_admin = True
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser):
email = models.EmailField(
verbose_name='Email address',
max_length=255,
unique=True,
db_index=True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
def get_full_name(self):
# The user is identified by their email address
return self.email
def __unicode__(self):
return self.email
Và admin.py của tôi trông giống như dưới đây.
class MyUserAdmin(UserAdmin):
# The forms to add and change user instances
form = UserChangeForm
add_form = UserCreationForm
# The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
list_display = ('email', 'is_admin')
list_filter = ('is_admin',)
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Permissions', {'fields': ('is_admin',)}),
('Important dates', {'fields': ('last_login',)}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2')}
),
)
search_fields = ('email',)
ordering = ('email',)
filter_horizontal =()
// Now register the new UserAdmin...
admin.site.register(MyUser, MyUserAdmin)
// ... and, since we're not using Django's builtin permissions,
// unregister the Group model from admin.
admin.site.unregister(Group)
Tôi làm theo các trên từ các hướng dẫn django (https://docs.djangoproject.com/en/dev/topics/auth/customizing/#a-full-example)
Bây giờ vấn đề tôi đang gặp là bất cứ khi nào tôi sửa đổi gì trong admin, tôi nhận được một thông báo lỗi nói rằng bên dưới.
(1452, 'Không thể thêm hoặc cập nhật một hàng con:. Một ràng buộc khoá ngoại thất bại (csiop
django_admin_log
, CONSTRAINT user_id_refs_id_c8665aa
KEY NƯỚC NGOÀI (user_id
) THAM KHẢO auth_user
(id
))')
Vì vậy, có vẻ như Bảng django_admin_log luôn cần tham chiếu khóa ngoài tới mô hình auth_user. Nhưng vì tôi đã tạo một mô hình người dùng của khách hàng, khi tôi tạo một người dùng siêu chi tiết người dùng chỉ được lưu trữ trong bảng MyUser của khách hàng và không có mục nhập nào được tạo trong mô hình auth_user, điều này có vẻ gây ra vấn đề.
Làm cách nào để giải quyết vấn đề này? Xin đề nghị.
Cảm ơn Sreekanth
Bạn đã đặt 'AUTH_USER_MODEL' trong cài đặt của mình chưa? https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model – Ngenator
Có. tôi có AUTH_USER_MODEL được đặt để trỏ tới MyUser tùy chỉnh. – Dev