2017-01-29 1 views
1

특정 사용자의 관리 앱에서 외래 키로 옵션을 제한하려고합니다 (제한하려는 필드를 학교라고 함) . 내 코드는 다음과 같습니다. 불행히도 (이름을 클릭하여) 학생을 편집하려고 할 때 두 가지 문제점 (아래 언급)이 있습니다. 학교에 대한ModelAdmin의 외래 키 옵션을 제한하면 "올바른 선택 항목을 선택하십시오."

1. 디폴트 값은 -

할수 있도록 팝업

내가 드롭 다운 메뉴에서 올바른 학교를 선택하고

가 선택 말하는 내가 학교 필드에 오류가 저장하려고 유효한 선택. 이 선택은 이용 가능한 선택 사항 중 하나가 아닙니다. 이는 모습입니다

내가 방법을

def formfield_for_foreignkey(self, db_field, request, **kwargs): 

모든 작업을 제거하지만 내가 외래 키를 제한 할 수없는 경우 이제

class modelStudentAdmin(admin.ModelAdmin): 

    def get_queryset(self, request): 
     qs = super(modelStudentAdmin, self).get_queryset(request) 

     if request.user.is_superuser: 
      return qs 
     else: 
      schoolInstance = modelSchool.objects.get(user=request.user) 
      qs = modelStudent.objects.filter(school=schoolInstance) 
      return qs 

    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     if request.user.is_superuser: 
      return super(modelStudentAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

     #Not superuser only staff 
     if db_field.name == 'school': 
      t = modelSchool.objects.filter(user=request.user).values_list("school_name",flat=True) 
      kwargs['queryset'] = t 

     return super(modelStudentAdmin,self).formfield_for_foreignkey(db_field, request, **kwargs) 

enter image description here

있다. 내가 뭘 잘못하고 있을지에 대한 제안?

답변

1

보십시오 당신이 당신의 쿼리 집합을 VALUE_LIST 할 필요가없는이

modelSchool.objects.filter(user=request.user) 

t = modelSchool.objects.filter(user=request.user).values_list("school_name",flat=True) 

교체.

+0

감사합니다. –

관련 문제