Hi,
Please help me in this part, I stuck in some days,
My project is about a university system which professors and students can sign
up and login. I use Custom User Django which inherits User Django Model. It
should be mentioned that login is by identity number and Student-no and
Professor-no.
My codes are as follow:
Models.py:
class CustomUser(AbstractUser):
USER_TYPE_CHOICES = ((1, 'student'),
(2, 'professor'),)
username = models.CharField(max_length=50, unique=True)
user_type = models.PositiveSmallIntegerField(choices=USER_TYPE_CHOICES,
null=True)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=100)
identity_no = models.PositiveIntegerField(default=0)
email = models.EmailField(max_length=300,
validators=[RegexValidator
(regex="^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.["r"a-zA-Z0-9-.]+$",
message='please enter the correct
format')],
)
date_joined = models.DateTimeField('date joined', default=timezone.now)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
class Student(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
entry_year = models.PositiveIntegerField()
student_no = models.PositiveIntegerField()
def get_full_name(self):
return self.user.first_name +" "+ self.user.last_name
def __unicode__(self):
return self.user.first_name +" "+ self.user.last_name
def __str__(self):
return self.user.first_name +" "+ self.user.last_name
serializers.py:
"""STUDENT LOGIN"""
class StudentLoginSerializer(serializers.ModelSerializer):
user = CustomUserSerializerForLogin()
class Meta:
model = Student
fields = [
"user",
"student_no", ]
def validate(self, data): # validated_data
user_data = data.pop('user', None)
identity_no = user_data.get('identity_no')
print("identity_no", identity_no)
student_no = data.get("student_no")
user = Student.objects.filter(
Q(user__identity_no=identity_no) |
Q(student_no=student_no)
).distinct()
# user =
user.exclude(user__identity_no__isnull=True).exclude(user__identity_no__iexact='')
if user.exists() and user.count() == 1:
user_obj = user.first()
else:
raise ValidationError("This username or student_no is not existed")
if user_obj:
if not user_obj.check_password(student_no): # Return a boolean of
whether the raw_password was correct.
raise ValidationError("Incorrect Credential please try again")
return user_obj
Views.py:
class StudentLoginView(APIView):
queryset = Student.objects.all()
serializer_class = StudentLoginSerializer
def post(self, request, *args, **kwargs):
data = request.data
serializer = StudentLoginSerializer(data=data)
if serializer.is_valid(raise_exception=True):
new_data = serializer.data
return Response(new_data, status= HTTP_200_OK)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
Error:
The error is about check_password attribute which is not existing in Student
Object.
Sent from Mail for Windows 10
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/5d22c291.1c69fb81.81d84.d526%40mx.google.com.
For more options, visit https://groups.google.com/d/optout.