2014-04-15 2 views
0

모델 City와 ManyToMany 관계가 있으며 상태가있는 외래 키에 대한 필드가 있습니다. Django admin 필드 위젯에 상태 이름을 포함 시켜서 자동 완성이되도록 노력하고 있습니다 (Django 프로젝트에 도시가 ,이기 때문에). Django 모델의 유니 코드 출력에 외래 키를 추가하는 가장 좋은 방법

나는 다음과 같이시 __unicode__state.name을 추가 할 생각 :

class State(models.Model): 
    name = models.CharField(max_length=100) 

class City(models.Model): 
    name = models.CharField(max_length=100) 
    state = models.ForeignKey(State) 
    def __unicode__(self): 
     return u'(%s) %d. %s' % (self.state.name, self.id, self.name) 

class Person(models.Model): 
    cities_lived_in = models.ManyToManyField(City, null=True, blank=True) 

하지만이 분 이상에 의해로드 시간을 증가 : 4 초 1.6 분.

Django의 manytomany 위젯에 상태 이름을 추가하는 데 시간이 오래 걸리는지 궁금합니다. 모델 폼을 변경할 수도 있지만 모든 도시를 검색 한 다음 반복하고 모든 관련 상태를 조회하므로 동일한 결과가 더 나쁘지는 않을지라도 생각합니다.

+0

관리자와 함께 장고 1.6을 사용하고 "withState"가 작동합니다. 하지만 그것 없이는 Unicode()에 외래 키 문자열을 가지고있을 때 오류가 발생합니다 : 일치하는 쿼리가 존재하지 않습니다. 이상한. – Timo

답변

0

문제는 필자가 관련 모델을 선택해야한다는 것이고, 제 상황에서는 각 쿼리로 관련 모델을 선택해야한다는 것입니다. Django: Force select related?

그래서 도시 모델은 이제 다음과 같다 :

class WithState(models.Manager): 
    def get_query_set(self): 
     return super(WithState, self).get_query_set().select_related('state')   

class City(models.Model): 
    name = models.CharField(max_length=100) 
    state = models.ForeignKey(State) 
    objects = WithState() 

    def __unicode__(self): 
     return u'(%s) %d. %s' % (self.state.name, self.id, self.name) 

로드 그래서 그 대신 내가 City 모델을 사용하는 뷰에 select_related을하는이 SO 질문처럼, 나는 사용자 정의 모델 관리자를 만든 시간은 3 초로 줄었습니다.

관련 문제