2015-04-25 122 views
1

我在Django工程學院編寫代碼限制從國外關鍵項目的選擇:Django管理視圖根據用戶

1)學院設有工程分行像計算機工程證書,機甲工程證書,化學工程證書。

2)現在每個店都會有不同的類,如用於FRST年enginnering計算機已經到班說,FYCO1和FYCO2

3)我已經創建了不同用戶的部門(HOD)和之後的每頭型號:

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)現在每個HOD(用戶)必須能夠添加一個類只有他自己部門(分公司),如何實現這個功能???

注:我沒有寫任何意見,(也不想這麼做)。我使用Django默認的管理 視圖

+0

? – HassenPy

+1

我正在使用django管理員添加類.....當我作爲計算機工程的HOD登錄。外鍵,分支,必須只顯示Computer Engg的一個選項,而不是所有分支......因爲HOD Comp Engg關注他自己的部門而不是所有部門...... GOT IT? –

回答

0

閱讀HOD在M_ClassAdmin的唯一分支機構先HOD和分公司之間的關係,對於這一點,做出改變在Model.py作爲

from django.contrib.auth.models import User 

添加霍德字段作爲

HOD = models.ForeignKey(User) 

存儲HOD和分公司的關係

現在Model.py將非常具有...

admin.py覆蓋get_queryset
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 

然後和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) 
你想在視圖或模型來實現這一