2015-11-05 30 views
2

我遵循django doc創建自定義用戶模型,同時使用自己的字段擴展模型本身。因此,它成了這個樣子:django admin - 您無權編輯任何東西

class MyUser(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(max_length=255, unique=True) 
    first_name = models.CharField(max_length=35) 
    last_name = models.CharField(max_length=35) 
    username = models.CharField(max_length=70, unique=True) 
    date_of_birth = models.DateField() 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    @property 
    def is_staff(self): 
     return self.is_admin 

    def get_full_name(self): 
     return ('%s %s') % (self.first_name, self.last_name) 

    def get_short_name(self): 
     return self.username 

    objects = MyUserManager() 
    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['first_name', 'last_name', 'username', 'date_of_birth'] 

而且它的經理是:

​​

不過,我創建了超級用戶後,同時執行syncdb,當我登錄到管理面板,沒有什麼可以做的。它顯示:

您沒有權限編輯任何內容。

我看到了一些其他職位同樣的問題,其中大部分建議在urls.py.添加admin.autodiscover()但即使這並沒有幫助我。

這是admin.py:

class MyUserAdmin(UserAdmin): 
    form = UserChangeForm 
    add_form = UserCreationForm 

    list_display = ('email', 'first_name', 'last_name', 'username', 'date_of_birth', 'is_admin') 
    list_filter = ('is_admin',) 
    fieldsets = (
     (None, {'fields': ('email', 'password')}), 
     ('Personal info', {'fields': (('first_name', 'last_name'), 'username', 'date_of_birth')}), 
     ('Permissions', {'fields': ('is_admin',)}), 
    ) 

    add_fieldsets = (
     (None, { 
      'classes': ('Wide',), 
      'fields': ('email', 'first_name', 'last_name', 'username', 'date_of_birth') 
     }), 
    ) 
    search_fields = ('email',) 
    ordering = ('email',) 
    filter_horizontal =() 


admin.site.register(MyUser, MyUserAdmin) 

什麼我錯在這裏做什麼?請幫我解決這個問題。謝謝。

回答

7

在這裏回答我的問題。所以問題是,PermissionsMixin。我認爲PermissionsMixin將會處理所有與permssion有關的事情。但是,即使我將PermissionsMixin添加到新用戶模型中,我必須明確地通過添加is_superuserhas_perm來使tell django確信超級用戶確實是超級用戶。

所以我改變了我的功能用戶管理器裏面

def create_superuser(self, email, first_name, last_name, username, date_of_birth, password, **kwargs): 
     user = self.create_user(
      email, 
      first_name=first_name, 
      last_name=last_name, 
      username=username, 
      date_of_birth=date_of_birth, 
      password=password, 
      is_superuser=True, 
      **kwargs 
     ) 

希望這將幫助我這樣的人!

+2

這幫了我。謝謝! –

+2

對我也有幫助!謝謝 – s0nskar

相關問題