I want my login function to classify If user
is an one-to-one field
in Alumni
or Personel
table.
If user
is related to Alumni
table, log the user in and redirect to profile page.
If user
is related to Personel
table, log the user in and redirect to another page.
model.py
class Alumni(models.Model):
Alumni_id = models.IntegerField(primary_key=True)
User_id = models.OneToOneField(User,on_delete=models.CASCADE)
Name = models.CharField(max_length=50 , null=True)
Surname = models.CharField(max_length=50 , null=True)
image = models.ImageField(default = 'default.jpg',upload_to='profile_pic')
LinkedIn = models.CharField(max_length=256 , null=True , blank=True)
Line = models.CharField(max_length=50 , null=True , blank=True)
Email = models.EmailField(max_length=50 , null=True , blank=True)
Province = models.CharField(max_length=50)
District = models.CharField(max_length=50)
Sub_District = models.CharField(max_length=50)
Postal_code = models.IntegerField()
Address = models.CharField(max_length=50, null=True , blank=True)
PhoneNumber = models.IntegerField( null=True)
def __str__(self):
return ("Alumni id:%s" %(self.User_id))
def get_absolute_url(self):
from django.urls import reverse
return reverse('Alumni_detail', args=[str(self.Alumni_id)])
class Personel(models.Model):
Personel_id = models.IntegerField(primary_key=True)
User_id = models.OneToOneField(User,on_delete=models.CASCADE)
Name = models.CharField(max_length=50 , null=True)
Surname = models.CharField(max_length=50 , null=True)
Email = models.EmailField(max_length=50 , null=True , blank=True)
view.py
def loginpage(request):
if request.method =='POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
user = form.get_user()
login(request,user)
return redirect('/profile')
else:
form = AuthenticationForm()
return render(request,'login.html',{'form':form})
CodePudding user response:
You could check for the instance being available in the table like so:
def loginpage(request):
if request.method =='POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
user = form.get_user()
login(request.user)
# Check here
try:
is_alumni = Alumni.objects.get(User_Id=user)
return redirect('/profile')
except:
return redirect('/other-page')
else:
form = AuthenticationForm()
return render(request,'login.html',{'form':form})
Note that this assumes that each user is either related to Alumni
or Personel
. Also make sure to use the common naming convention for your model fields being lowercase.
CodePudding user response:
you can have a type field in user object.
yourapp/models.py
from django.contrib.auth.models import AbstractUser
USER_TYPE = (
(1, 'Alumni'),
(2, 'Personel'),
)
class User(AbstractUser):
user_type = models.PositiveSmallIntegerField(
choices=USER_TYPE,
default=1,
)
and add this in your settings.py
AUTH_USER_MODEL = '{YOUR_APP_NAME}.{YOUR_USER_MODEL}'
then, each time a user log in you can check for the type.
yourapp/views.py
def login(request) :
if request.method =='POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
user = form.get_user()
login(request.user)
# Check here
if user.user_type == 1 :
return redirect('alumni')
elif user.user_type == 2 :
return redirect('personel')
else:
form = AuthenticationForm()
return render(request,'login.html',{'form':form})