2016-08-14 4 views
0

장고에서 문자열과 같은 필터에서 필드 객체를 가져 오려고합니다. 예를 들어 Django의 문자열 경로에서 모델 필드를 가져 오는 방법

,

Sale.objects.filter(product__category__name='shoes') 

감안할 모델 Sale 및 문자열 "product__category__name", 그것은 Category.name에 대한 필드 개체를 얻을 수 있습니다? (또는 해당 필드의 verbose_name).

UPDATE는

이 내가 결국 당신은이 라인을 따라 뭔가를 시도 할 수 object._meta.get_field('field').verbose_name

category._meta.get_field('name').verbose_name 

답변

0

해낸 것입니다

당신은 당신이 너무 응용 프로그램의 이름을 알아야으로이 어렵게 얻을 수있는 여러 애플 리케이션을 가지고 있지만, 어쩌면이 인수로 전달 될 수 있다면

이름을

을 반환합니다.

+0

조회 문자열에서 포인트가 카테고리 모델에 도달하고 있습니다. – haki

+0

당신은 어떤 물건을 가지고 있습니까? 'Sale' 클래스와''product__category__name "'문자열? 또는 다른 것? – atn

0

를 호출해야 verbose_name를 얻으려면

from django.db.models.fields import FieldDoesNotExist 

def find_field(model, lookup): 
    lookups = list(reversed(lookup.split("__"))) 
    field = None 

    while model and lookups: 
     current = lookups.pop() 
     field = model._meta.get_field(current) 
     model = field.related_model 
     if lookups and model is None: 
      raise FieldDoesNotExist(lookup) 
    return field