2013-05-14 1 views
0

: 내 admin.py에서장고 관리 사이트보기 일대일 수업 필드 내 모델

class Professor(models.Model): 
    user = models.OneToOneField(User) 
    salary = models.FloatField() 
class Student(models.Model): 
    user = models.OneToOneField(User) 
    birth_date = models.DateField() 

from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 

UserAdmin.list_display = ('email', 'first_name', 'last_name','is_active','date_joined', 'is_staff') 

이 어떻게 내부 사용자 사용자가 교수 또는 학생 인 경우 관리자 사이트를 표시 할 수 있습니까? 모델을 기반으로 한 개인 급여 같은 속성에 액세스 할 수 있습니까?

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 

class ProfessorInline(admin.StackedInline): 
    model = Professor 

class StudentInline(admin.StackedInline): 
    model = Student 

class MyUserAdmin(UserAdmin): 
    inlines = [ProfessorInline, StudentInline] 


admin.site.unregister(User) 
admin.site.register(User, MyUserAdmin) 

그것은 완벽 하진 :

답변

2

list_display에서 사용자 정의 방법을 사용할 수 있습니다.

from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin 
from django.contrib.auth.models import User 

class UserAdmin(DjangoUserAdmin): 
    list_display = ('email', 'first_name', 'last_name','is_active','date_joined', 'is_staff', 'user_type', 'salary') 

    def user_type(self, instance): 
     try: 
      instance.student 
      return "student" 
     except Student.DoesNotExist: 
      return "professor" 

    def salary(self, instance): 
     try: 
      return instance.professor.salary 
     except Professor.DoesNotExist: 
      return "N/A" 

    def queryset(self, request): 
     qs = super(UserAdmin, self).queryset(request) 
     # To reduce database calls 
     return qs.select_related('student', 'professor') 


admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

그것은 관리자 페이지를 change_list 추가 열 user_typesalary을 추가합니다 : 이것은 코드입니다.

업데이트 : 덕분에 @Adrián López. 이제 장고 내장 UserAdmin에서 서브 클래 싱.

+0

필수'model' 속성이 없습니다. 또한 암호 해시를 편집 할 수 있습니다. 대신'UserAdmin'을 django의 bultin'UserAdmin'으로 확장하십시오.'User' 모델을 위해 일반 모델 관리자를 사용한다면 실종 될 수있는 꽤 많은 기능이 있습니다. –

+0

대단히 감사합니다! – belonious

1

당신은 inline 사용할 수 있습니다. 관리자 패널 UserProfessorStudent 필드가 모두 표시되어야합니다. Professor 또는 Student 인 경우 명시 적으로 표시되지 않습니다. 그것은 솔직히 말해서별로 의미가 없습니다. 당신은 헤렌시 (herency)를 사용하지 않으므로 User 사람이 동시에 Professsor이고 Student 인 사람이있을 수 있습니다.

더 잘 하시려면 TabularInline을 시도해보십시오.