2017-02-07 9 views
1

私は登録ページを持っており、ユーザは自分のデータを登録します。登録ユーザにトークンを提供する必要があります。 rest_framework.authtokenDEFAULT_PERMSSIONAUTH_USER_MODELsettings.py、このエラーが発生すると登録しようとしているときに、所有者フィールドがUserクラスにありますIntegrityError(1048, "Column 'owner_id' cannot be null")。あなたのsettings.pyでdjango rest_frameworkを使用している間にカスタムユーザをベースにしたトークン認証

views.py

def transregister(request): 
    if request.POST: 
     args = {} 
     args.update(csrf(request)) 
     # try: 

     if request.method == 'POST': 

      user = UserForm(request.POST) 
      username = request.POST['username'] 
      email = request.POST['email'] 
      password = request.POST['password'] 
      confirm_pwd = request.POST['confirm_pwd'] 
      company_name = request.POST['company'] 

      profile_type = request.POST['trainer-company'] 

      trainerprofile = TrainerForm(request.POST) 

      corporate_profile = CorporateProfileForm(request.POST) 
      print username 


      if user.is_valid(): 
       userModel = user.save(commit=False) 
       userModel.is_user = True 
       userModel.is_active=True 
       userModel.save() 

models.py

class User(models.Model): 
    username = models.CharField(max_length=150) 
    #username = models.OneToOneField(User, on_delete=models.CASCADE) 
    email = models.CharField(max_length=250,unique=True) 
    company = models.CharField(max_length=250) 
    password = models.CharField(max_length=150) 
    confirm_pwd = models.CharField(max_length=150) 
    is_admin = models.BooleanField(default=False) 
    is_user = models.BooleanField(default=False) 
    is_active = models.BooleanField(default=False) 
    device_id = models.CharField(max_length=1000, blank=True, null=True) 

    # User = get_user_model() 
    user = settings.AUTH_USER_MODEL 
    owner = models.ForeignKey('user', related_name='User', on_delete=models.CASCADE) 
    highlighted = models.TextField(default = '') 

    objects = UserManager() 

    #class Meta: 
    # db_table = u'index_user' 


    REQUIRED_FIELDS= ('username',) 
    USERNAME_FIELD = ('email') 

    def __str__(self): 
     return self.username 

@receiver(post_save, sender=settings.AUTH_USER_MODEL) 
def create_auth_token(sender, instance=None, created=False, **kwargs): 
    if created: 
     Token.objects.create(user=instance) 

serializers.py

class UserSerializer(serializers.ModelSerializer): 
    owner = serializers.PrimaryKeyRelatedField(many=True, queryset=User.objects.all()) 
    #print 'owner' 
    #owner = serializers.ReadOnlyField(source='owner.username') 
    class Meta: 
     model = User 
     fields = ('id','username','email','company','password','confirm_pwd','is_admin','is_user','is_active','device_id','highlighted','owner') 
+0

これは、次の表のどれですか?移行時に同じエラーが発生しますか? –

+0

私はinddex_userテーブルを持っていて、移行時にエラーは発生せず、settings.pyにDEFAULT_PERMISSION_CLASS、DEFAULT_AUTHENTICATION_CLASS、AUTH_USER_MODEL = index.USERがあります – ravikiran

答えて

1

あなたはTokenAuthenticationを含めるように認証クラスを設定する必要があります。あなたはまた、独自のユーザモデルを作成していることから、あなたのカスタムモデルを参照AUTH_USER_MODEL設定の値をprivideする必要が今

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
    ), 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.TokenAuthentication', 
    ) 
} 

は、あなたがこれを使用する必要がありsettings.pyでそれを設定するには:

関連する問題