要在 M_ClassAdmin 中只读 HOD 的分支,首先在 HOD 和 Branch 之间建立关系为此,在 Model.py 中进行更改为
from django.contrib.auth.models import User
添加 Hod 字段为
HOD = models.ForeignKey(User)
存储HOD和Branch关系
现在 Model.py 将...
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
然后在 admin.py 中覆盖 get_queryset 和 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)