I am writing code in Django for Engineering College:
1) College has Engineering Branches like Computer Engg, Mech Engg, Chemical Engg.
2) Now each Branch will have different classes like for Frst year enginnering in computer has to classes say, FYCO1 and FYCO2
3) I have created different users for each head of the department(HOD) and following models:
class M_Branch(models.Model):
Branch_ID = models.CharField(max_length=20)
Branch_Name= models.CharField(max_length=50)
def __str__(self):
return self.Branch_Name
class M_Academic_year(models.Model):
Academic_year = models.CharField(max_length=20)
def __str__(self):
return self.Academic_year
class M_Class(models.Model):
Branch_ID = models.ForeignKey(M_Branch)
Academic_Year = models.ForeignKey(M_Academic_year)
Class_ID = models.CharField(max_length=20)
Class_Name = models.CharField(max_length=20)
def __str__(self):
return self.Class_Name
4) Now each HOD (user) must be able to add a class for only his own department(branch),HOW TO ACHIEVE THIS FUNCTIONALITY???
Note: I have not written any views,(and don't want to do so). I am using Django's default admin view
To read only branch of HOD in M_ClassAdmin first make a relation between HOD and Branch For this, make changes In Model.py as
from django.contrib.auth.models import User
Add Hod Field as
HOD = models.ForeignKey(User)
to store HOD and Branch relation
Now Model.py willbe...
class M_Branch(models.Model):
HOD = models.ForeignKey(User)
Branch_ID = models.CharField(max_length=20)
Branch_Name= models.CharField(max_length=50)
def __str__(self):
return self.Branch_Name
class M_Academic_year(models.Model):
Academic_year = models.CharField(max_length=20)
def __str__(self):
return self.Academic_year
class M_Class(models.Model):
Branch_ID = models.ForeignKey(M_Branch)
Academic_Year = models.ForeignKey(M_Academic_year)
Class_ID = models.CharField(max_length=20)
Class_Name = models.CharField(max_length=20)
def __str__(self):
return self.Class_Name
Then in admin.py Override get_queryset and formfield_for_foreignkey
class M_ClassAdmin(admin.ModelAdmin):
def get_queryset(self, request):
print("Query SET")
qs = super(M_ClassAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
user = User.objects.get(username=request.user.username)
branch = M_Branch.objects.get(HOD = user)
print("Branch_ID_id",branch)
return qs.filter(Branch_ID_id=branch)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
print("I am in func::")
if db_field.name == "Branch_ID":
print("db_field.name",db_field.name)
user = User.objects.get(username=request.user.username)
if not user.is_superuser:
print('user=',user)
branch = M_Branch.objects.get(HOD = user)
print('branch = ',branch)
'''if user=='E0711001':
kwargs["queryset"] = M_Branch.objects.filter(Branch_ID='B101')
#elif user=='E0711002':
else:
kwargs["queryset"] = M_Branch.objects.filter(Branch_ID='B102')'''
#kwargs["queryset"] = M_Branch.objects.filter(Branch_ID=user.branch.id)
kwargs["queryset"] = M_Branch.objects.filter(Branch_Name=branch)
return super(M_ClassAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
fields = ['Branch_ID','Academic_Year','Class_Name']
list_filter = ['Academic_Year','Class_Name']
search_fields = ['Branch_ID','Academic_Year','Class_Name']
list_display = ('Class_Name','Branch_ID','Academic_Year')
admin.site.register(M_Class,M_ClassAdmin)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.