2016-10-27 1 views
1

Django 관리자 목록보기에서 이름이없는 제품을 숨기려고합니다. 방금 get_query_set() 메서드에서 제외했습니다.Django - 관리자 목록에만 있고 관리자 세부 정보 페이지에는없는 QuerySet 설정

def get_queryset(self, request): 
    qs = super(ProductAdmin, self).get_queryset(request) 
    return qs.exclude(name=None) 

이 완벽하게 작동하고,하지만 난 (직접 링크) 관리자의 세부 정보 페이지에 이름없이 제품에 액세스 할 수 있어야합니다. 기본 키 u'123와 http://127.0.0.1/product/123

제품 객체가 '존재하지 않습니다 : 그것은이를하려고하면 그것은의 검색어에서 제품을 필터링하기 때문에 , 난 오류가 있습니다.

이 문제를 해결할 수있는 방법이 있습니까? 가능한 경우 목록보기에 사용자 지정 필터를 추가하지 않습니다.

답변

1

글쎄, 당신이이 문서화되지 않은 get_object

def get_object(self, request, object_id, from_field=None): 
    """ 
    Returns an instance matching the field and value provided, the primary 
    key is used if no field is provided. Returns ``None`` if no match is 
    found or the object_id fails validation. 
    """ 

    model = product 
    field = model._meta.pk if from_field is None else model._meta.get_field(from_field) 
    try: 
     object_id = field.to_python(object_id) 
     return model.objects.get(**{field.name: object_id}) 
    except (model.DoesNotExist, ValidationError, ValueError): 
     return None 

무시할 수도 있지만 작동하도록 만들 수 있습니다. 표준 방법은 맞춤 필터를 사용하는 것입니다.

0

당신이 change 또는 changelist

def get_queryset(self, request): 
    qs = super(ProductAdmin, self).get_queryset(request) 
    if request.resolver_match.url_name == "APPNAME_MODELNAME_changelist": 
     return qs.exclude(name=None) 
    return qs 

장고 버전에 있다면 당신은 확인할 수 있습니다 : 1.9

+0

이 또한 들으 좋은 솔루션입니다 :) –