Tôi đang cố gắng thiết lập mô hình người dùng tùy chỉnh của mình ở Django. Lý do là tôi muốn sử dụng email làm tên người dùng và xóa hoàn toàn trường tên người dùng. Tôi đã gặp phải một lỗi, rằng tôi không thể hiểu được.Lỗi mô hình người dùng tùy chỉnh
Manager isn't available; User has been swapped for 'app.MyUser'
Exception Location: .../django/db/models/manager.py in __get__, line 256
Python Version: 2.7.3
Python Path:
[...project specific files,
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PIL',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
Tôi đã googled như điên, nhưng không tìm thấy quá nhiều trang về thông báo lỗi này. Tôi đã tìm thấy một số trang, với những gợi ý về cách giải quyết nó, nhưng không có gợi ý nào đã làm việc cho tôi.
Mã của tôi: Tôi đã đặt mô hình người dùng tùy chỉnh. Tôi đã khai báo mô hình người dùng tùy chỉnh AUTH_USER_MODEL = 'app.MyUser'
trong settings.py. Tôi cũng đã thiết lập UserManager tùy chỉnh:
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
"""
Creates and saves a User with the given email. Note that none of the optional fields gets values in the creation. These fields will have to be filled out later on.
"""
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=None):
"""
Creates and saves a superuser with the the above mentioned attributes
"""
user = self.create_user(email, password=password)
user.is_admin = True
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser, PermissionsMixin):
"""
Custom made User model. No username, instead email is used as unique field and index
"""
Genders = (('M', 'Man'), ('K', 'Woman'))
FirstName = models.CharField(max_length=30)
LastName = models.CharField(max_length=40)
Gender = models.CharField(max_length=2, choices=Genders, default='K')
email = models.EmailField(verbose_name='email address', max_length=255, unique=True, db_index=True,)
twitter = models.CharField(max_length=30)
is_admin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def get_full_name(self):
# The user is identified by their email address
return self.email
def get_short_name(self):
# The user is identified by their email address
return self.email
def __unicode__(self):
return self.email
objects = MyUserManager()
Tôi đã cố gắng khai báo với các loại UserAdmins khác nhau, không cái nào trong số đó tạo nên sự khác biệt, cái đầu tiên tôi đã thử là;
class MyUserAdmin(UserAdmin):
# The forms to add and change user instances
#form = UserChangeForm
#add_form = FrontpageRegistrationForm
list_display = ('email', 'FirstName', 'LastName', 'Gender', 'twitter')
list_filter =()
add_fieldsets = ((None, {'classes': ('wide',),'fields': ('email', 'password1', 'password2')}),)
search_fields = ('email',)
ordering = ('email',)
filter_horizontal =()
admin.site.register(MyUser, MyUserAdmin)
tôi đã nhận xét ra hai thuộc tính add_form
và form
vì họ nêu ra một số lỗi hình thức tôi muốn quay trở lại tại một điểm sau đó.
Tài khoản người dùng thứ hai được tạo, sau khi đọc về bản sửa lỗi có thể có here. Điều này đã không giúp tình hình mặc dù;
class MyUserAdmin(admin.ModelAdmin):
# The forms to add and change user instances
#form = UserChangeForm
add_form = FrontpageRegistrationForm
add_fieldsets = ((None, {'classes': ('wide',),'fields': ('email', 'password1', 'password2')}),)
def get_fieldsets(self, request, obj=None):
if not obj:
return self.add_fieldsets
return super(MyUserAdmin, self).get_fieldsets(request, obj)
def get_form(self, request, obj=None, **kwargs):
defaults = {}
if obj is None:
defaults.update({'form': self.add_form,'fields': admin.util.flatten_fieldsets(self.add_fieldsets),})
defaults.update(kwargs)
return super(MyUserAdmin, self).get_form(request, obj, **defaults)
Tôi cũng đã thử xóa tất cả các bảng trong db mà không có may mắn.
Tôi sẽ vô cùng vĩ đại với bất kỳ ai thậm chí xem xét vấn đề. Và nếu có ai giải quyết vấn đề này, tôi sẽ cố hết sức để nói chuyện với vợ tôi về việc đặt tên cho đứa con đầu lòng của chúng ta sau khi Thế Thần trao cho tôi một giải pháp để tôi có thể tiếp tục sống.
EDIT: Tôi đã thử đặt AUTH_USER_MODEL
thành mainfolder.app.MyUser
Tôi chắc chắn rằng "thư mục chính" nằm trên đường dẫn con trăn. init .py trong ứng dụng phải chính xác. Cài đặt mới.py đã đưa ra lỗi máy chủ sau; auth.user: AUTH_USER_MODEL is not of the form 'app_label.app_name'.admin.logentry: 'user' has a relation with model smartflightsearch.SFSdb.MyUser, which has either not been installed or is abstract.registration.registrationprofile: 'user' has a relation with model, which has either not been installed or is abstract.
Một manh mối mới Tôi không biết làm thế nào để giải thích ..
Tên ứng dụng của bạn có phải là '' ứng dụng '' không? – Rohan
Trước hết, đừng hoảng sợ, chúng tôi sẽ giải quyết vấn đề này. :) Khi nào bạn thấy lỗi? Lỗi có biến mất nếu bạn tắt quản trị viên không? Bạn đã thử gỡ lỗi ở chế độ từng bước chưa? –
@Ivan Ok, thật tuyệt vời khi nghe :) Lỗi xảy ra sau khi nhập thông tin đăng nhập người dùng trên/admin và nhấn "đăng nhập". Tôi hy vọng lỗi sẽ biến mất nếu tôi tắt quản trị viên, Không có cơ hội để kiểm tra ngay bây giờ, Nhưng các trang không liên quan đến quản trị hoạt động tốt. – Rookie