Reputation: 23
I have register page,the users register their data.the thing is I need to provide tokens to registered users while they are registering,for this I have User model,and I added rest_framework.authtoken
in installed apps and DEFAULT_PERMSSION
,AUTH_USER_MODEL
in settings.py
, and I have owner field in User class, when I'm trying to register getting this error IntegrityError
: (1048, "Column 'owner_id' cannot be null")
.
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')
Upvotes: 1
Views: 663
Reputation: 1592
In your settings.py you need to configure the authentication classes to include TokenAuthentication.
To set it in settings.py you should use this:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
)
}
Now since you're also creating your own user model, you need to privide a value for the AUTH_USER_MODEL setting that references your custom model:
AUTH_USER_MODEL = 'myapp.MyUser'
Upvotes: 1