2012-01-23 2 views
1

제 질문은 명시 적으로 설정되지 않은 경우 모델 관리자의 메서드를 무시하고 기본 매개 변수를 전달하는 방법입니다. 내가 (수) 및 필터() 메소드는 매개 변수 deleted=False를 추가이 매개 변수를 명시 적으로 설정되지 않은 경우 (내가 Entry.objects.filter(deleted=True) 같은 물건을 의미 모두에서 원하는 어떻게 든 지금get() 또는 filter() 메서드의 Django 모델 기본 매개 변수

class Entry(models.Model): 

    user = models.ForeignKey(User, verbose_name=_("user")) 
    text = models.CharField(max_length=200) 
    date = models.DateTimeField(auto_now_add=True) 
    deleted = models.BooleanField(default=False) 

:

내가 모델 항목을 말해봐 기본 매개 변수는 제시된 매개 변수를 재정의해서는 안됩니다).

EntryManager를 만들고 Entry 모델의 관리자로 설정합니다. EntreManager에서 필터() 메소드 :

def filter(self, *args, **kwargs): 
    deleted = kwargs.get('deleted', False) 
    kwargs.update({'deleted':deleted}) 
    return super(EntryManager, self).get(*args, **kwargs) 

그러나이 경우 deleted__in=(True, False) 작동하지 않습니다, 그것은 이상한 아니지만 내가 어떻게이 권리를 수행하는 방법을 모른다. 미리 감사드립니다. django를 사용하는 방법에 의해 1.3.1

답변

8

here과 같이 관리자의 get_query_set 메서드를 재정의해야합니다. 귀하의 경우에는 다음과 같이 할 수 있습니다 :

def get_query_set(self): 
    return super(EntryManager, self).get_query_set().filter(deleted=False) 
+0

명시 적으로 매개 변수를 삭제할 때이 경우 수행 = – tony

+1

@tony : 일반'objects' 관리자와 특수 필터링 된 관리자 ('deleted' 또는 somesuch라고하는)라는 두 개의 관리자가 필요합니다.). – mipadi

+0

이제 고맙습니다. – tony