2016-08-14 3 views
0
내가 보여주는에서 시작합니다

어떻게 내 모델 모양 : 나는 두 개의 분리 된 필터링 된 목록을 표시 할 하나 개의 테이블에하지만 내 관리자 패널에서 모든 사람을 유지하려는필터 외래 키

from django.db import models 

class Project(models.Model): 
    #..... 
    pu = models.ForeignKey('Person', default='', related_name='pu') 
    se = models.ForeignKey('Person', default='', related_name='se') 

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50)  
    department = models.ForeignKey('Department', default='') 

class Department(models.Model): 
    abbreviation = models.CharField(default='', max_length=3) 
    full_name = models.CharField(default='', max_length=20) 

: 폴리 우레탄에 대한

  • 나는이다 부서 어떤 약자 만 사람을 보여주고 싶은 'PU'
  • 자체에 대한
  • 내가 '그 자체'입니다 부서의 어느 약어
  • 만 명을 표시 할

나는 많은 것을 찾았지만 나는 장고와 파이썬에 대해 매우 새로운 사람이다.

어떻게하면됩니까?

답변

0

일반적으로 django 관리자 작업이 가능하며 해킹이 약간 있습니다.

은 MyApp를/admin.py 파일 내 모델을 변경했습니다

from django.contrib import admin 
from .models import Project, Person 


class ProjectAdmin(admin.ModelAdmin): 
    ... 
    filter_horizontal = ('pu', 'se') 

    def get_form(self, request, obj=None, **kwargs): 
     form = super(ProjectAdmin, self).get_form(request, obj, **kwargs) 
     if obj: 
      form.base_fields['pu'].queryset = Person.objects.filter(department__abbreviation__startswith='pu') 
      form.base_fields['se'].queryset = Person.objects.filter(department__abbreviation__startswith='se') 
     return form 


admin.site.register(Project, ProjectAdmin) # register it 
0

를 만들어보십시오. 나는 사람과 부서를 사용하지 않을 것이고 장고의 사용자와 그룹으로 전환했다.

내가 필요한만큼 필터링하려면 limit_choices_to을 사용하십시오.

pu = models.ForeignKey("auth.User", related_name='pu', limit_choices_to={'groups__name': "Purchasing"}) 
se = models.ForeignKey("auth.User", related_name='se', limit_choices_to={'groups__name': "Sales"}) 

나는이 답변에 따라 : Django, filter users by group in a model foreign key