2017-09-18 9 views
0

Django(Django Unleashed)のチュートリアルの本を読んでいますが、新しいバージョンのDjango(私はamazonでもこのchaperの問題について読んだことがある)。だから、この本の将来の生徒には、私はこれをオープンに、本との関係で尋ねます。Django Unleashed Cp.22:FieldError:ユーザーに不明なフィールド(ユーザ名)が指定されています

カスタムユーザーモデルを作成するには、「username」フィールドを持たないユーザーモデルが推奨されます。このエラーがmakemigrations中にoccursd:

django.core.exceptions.FieldError: Unknown field(s) (username) specified for User 

StackOverflowの上でこのエラーに関する他のトピックがあり、彼らはdjango.contrib.auth.admin.UserAdminは、「ユーザ名」は指定されたため、属性がフォームUserAdminを継承するクラスにadd_fieldsetsと呼ばれる追加提案する必要があることを示唆しています。私の質問(私は他の問題にぶつかって本のコードより先に進む必要はありません)...ユーザー名を特定せずに、管理クラスなしでカスタムのユーザープロファイルを作成することは可能ですか? UserManagerの

Userモデル

class User(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField('email adress', max_length=254, unique=True) 
    is_staff = models.BooleanField('staff status', default=False) 
    is_active = models.BooleanField('active', default=False) 
    name = models.CharField(max_length=255) 
    joined = models.DateTimeField("Date Joined", auto_now_add=True) 

    USERNAME_FIELD = 'email' 
    objects = UserManager() 

    def __str__(self): 
     return self.email 

    def get_absolute_url(self): 
     return self.profile.get_absolute_url() 

    def get_full_name(self): 
     return self.name 

    def get_short_name(self): 
     return self.profile.name 

class UserManager(BaseUserManager): 
    use_in_migrations = True 

    def _create_user(
      self, email, password, **kwargs): 
     email = self.normalize_email(email) 
     is_staff = kwargs.pop('is_staff', False) 
     is_superuser = kwargs.pop(
      'is_superuser', False) 
     user = self.model(
      email=email, 
      is_active=True, 
      is_staff=is_staff, 
      is_superuser=is_superuser, 
      **kwargs) 
     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_user(
      self, email, password=None, 
      **extra_fields): 
     return self._create_user(
      email, password, **extra_fields) 

    def create_superuser(
      self, email, password, 
      **extra_fields): 
     return self._create_user(
      email, password, 
      is_staff=True, is_superuser=True, 
      **extra_fields) 

と私はあなたがAbstractUserの代わりを使用する必要があると思うエラー

+0

あなたは、問題のコードを提供する必要がある「[本の]コードに問題があると思う」場合。ここの読者全員がその本をそのテーブルに持っているわけではありません。それ以外の場合は、 "本のコードとの関連で"あなたの質問に答えるのは少し難しいです。 – Risadinha

+0

ここには、エラーメッセージが表示される場所のプロジェクト全体の分岐があります。 https://github.com/jambonrose/DjangoUnleashed-1.8/tree/19560085fc9e5d902c20968aed1293eca39dc5e8 –

答えて

0

なしmakemigrationsを実行したい:ここに私のコードは、これまでのところですthe AbstractBaseUser

class User(AbstractUser, PermissionsMixin): 

または必要例えば、あなたのモデルのusernameを宣言:

username = models.CharField(_('username'), max_length=30, unique=True) 
+0

私が学習を続けている間、私はこの解決策を念頭に置いています。しかし、私はあなたのソリューションを使って、望ましい振る舞いを創り出すことができると思っていますが、AbstractUserの使用はそのプロジェクトの意図ではないと思います。 –

関連する問題