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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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.

Reply via email to