2011-07-06 2 views
3

나는 User, Project, Role의 3 가지 모델 사이에 많은 관계를 맺었다. 사용자는 동일한 프로젝트에서도 여러 역할을하는 여러 프로젝트에있을 수 있습니다. 이 관계는 장고의 다음 클래스로 모델링되었습니다.Django formsets는 많은 관계에서 많은 관계가 느리다.

class User(models.Model): 
    name = models.CharField() 

class Project(models.Model): 
    name = models.CharField() 

class Role(models.Model): 
    name = models.CharField() 

class UsersProjects(models.Model): 
    user = models.ForeignKey(User) 
    project = models.ForeignKey(Project) 
    roles = models.ManyToManyField(Role) 

각 유형의 개체에 대해 모든 CRUD 뷰를 이미 만들었습니다. User 편집보기에서 사용자 프로젝트 추가/편집을위한 formset을 제공해야합니다. 그리고 Project 편집보기에서 사용자 역할 추가/편집을위한 formset을 제공해야합니다. 템플릿에서 다음

projectedit_formset_class = inlineformset_factory(Project, UsersProjects) 
project = Project.objects.get(id=2) 
projectedit_formset = projectedit_formset_class(instance=project) 

그리고,

<form method="post" action="."> 
    {{ projectedit_formset.as_table }} 
</form> 

, 기본적으로 내가했다 않았다 어떤 프로젝트 편집보기에서 예를 들어 이것은 각 사용자 -에 대한 역할에 대한 사용자와 다중 선택 필드의 선택 필드를 표시 역할 관계. 그러나 문제는 사용자 - 역할 관계의 수가 페이지로드 시간이 증가하면 미친 듯이 증가하는 경우입니다. 나는 이것이 사용자 목록과 역할 목록을 가져와야 할 때마다 SQL 쿼리를 실행하기 때문에 이런 일이 발생한다는 것을 알고있다. 장고가 똑같은 많은 쿼리를 실행하지 못하도록하는 방법이 있습니까?

+0

[메일 링리스트] (http : //groups.google.com/group/django-developers/browse_thread/thread/4c8fb46a670a6421) – vimukthi

+0

과 관련이 있습니다. 아무도 응답하지 않았습니다. formset에 많은 객체가있는 경우 성능에 문제가있는 것처럼 보입니다. 이 일을 실제로 할 수있는 방법이 없습니까? – JamesD

답변

1

수행 된 SQL을 분석하려면 Django Debug toolbar을 사용해야합니다.

아마도 __unicode __() 메쏘드가 추가 쿼리에 대해 책임이 있습니까?

의 옵션은 ModelForm 서브 클래스를 재정의하고 명시 적으로 forms.ModelChoiceFields의 검색어 세트의 속성에 select_related()를 추가하는 것입니다.

관련 문제