2013-04-20 1 views
0

나는 모델모델 여러 현장에서 조회 1.5

class ModelName(models.Model): 
    type = models.ForeignKey(AnotherModel) 
    slug = models.SlugField(editable=False) 

    class Meta: 
     unique_together = (('type', 'slug'),) 

    @models.permalink 
    def get_absolute_url(self): 
     return ('model_detail',(), {'type': self.type.slug, 'slug': self.slug}) 

및 URL

urlpatterns = patterns('', 
    url(r'^(?P<type>[-\w]+)/(?P<slug>[-\w]+)/$', ModelDetailView.as_view(), name='detail'), 
) 

와 DetailView

class ModelDetailView(DetailView): 
    model = MyModel 
    template_name = 'detail.html' 

을 가지고 있지만 나는 예외 MultipleObjectsReturned 슬러그 때문에 얻을 고유하지 않습니다. URL이 /type/slug/이 되길 원합니다. 모델에 동일한 슬러그가 있지만 두 가지 레코드가 포함될 수 있으므로 URL은 다른 결과가있는 /1/slug//2/slug/ 일 수 있습니다. 모델에 슬러그 대신 조회와 슬러그를 모두 사용하도록 어떻게 말할 수 있습니까?

답변

3

형식 및 문자열 필드를 사용하도록 '모델에 알릴 필요는 없습니다. 재정의해야하는 클래스 기반보기입니다.

쿼리 세트를 올바른 유형의 개체로 제한하려면 get_queryset 메서드를 재정의하는 것이 좋습니다. 또 다른 방법은 get_object 메서드를 재정의하는 것입니다.

class ModelDetailView(DetailView): 
    model = MyModel 
    template_name = 'detail.html' 

    def get_queryset(self): 
     """ 
     Restrict queryset to objects of the correct type 
     """ 
     return MyModel.objects.filter(type_id=self.kwargs['type']) 

자세한 내용은 Django 문서 (dynamic filtering)를 참조하십시오.