2014-03-03 3 views
0

필자는 모든 필드를 외래 키로 사용하는 모델을 가지고 있습니다. 내 모델> 리소스에서 관계형 쿼리를 작성하여 Riggs 또는 Pluto 같은 다른 모델의 특성에 액세스하여 내 템플릿으로 보낼 수있는 json 개체를 만들 수 있습니다.django의 관계형 모델에서 json 객체를 만드는 방법

class Resources (models.Model): 

    tag = models.CharField(max_length=60) 
    sans_id = models.ForeignKey(Sans, null=True,blank=True) 
    riggs_id = models.ForeignKey(Riggs, null=True,blank=True) 
    crocs_id = models.ForeignKey(Crocs, null=True,blank=True) 
    pluto_id = models.ForeignKey(Pluto, null=True, blank=True) 
    user_id = models.ForeignKey(Users, null=True, blank=True) 

def __unicode__(self): 
    return u'%s' % (self.tag) 

다음과 같은 방식으로 관계형 객체의 속성에 액세스하려고합니다. 하지만 난 어떤 속성을 내가 다른 사건에서 필요할 수 있습니다 그래서 내가 원하는 모든 필드에 액세스 할 수 있도록 json으로 완전한 관계형 객체를 원하는지 모르겠다.

for x in Resources.objects.all() 
    x.crocs_id.specifications 
    x.pluto_id.flag 
    x.pluto_id.settings 

답변

0

인수를 지정하지 않고 select_related 메서드를 사용하여 모든 외래 키 관계를 수행 할 수 있습니다.

for x in Resources.objects.select_related(): 
    # do something 

데이터베이스 테이블에 많은 행이 있으면 복잡한 쿼리가 생성됩니다.

+0

감사합니다. 하지만 select_related() serialize하고 json 다시 보낼 때 완전한 개체 개체를 제공하지 않습니다. FK 값만 있으면 관련 모델을 반복 할 수 없습니다. – Eastwood

0

당신은 결국 당신이

결과로 json.dumps()를 사용할 수는 = json.dumps (b)는 주변 어디서나

을 통과

b = {} 
for a in Resource.objects.all(): 
    for i in a: 
     b[str(i)] = i 

과의 같은 딕셔너리를 만들 수 있습니다

b는 모델 이름과 함께 키가있는 양식의 사전이며 각 키는 관련 모델과 일치하므로

0123과 같이 액세스 할 수 있습니다.

ㄱ [ 'crocs_id']. (당신의 악어의 모든 속성) 나는이 일을해야한다고 생각

................

0

다음과 같이 시도해보십시오.

resources= Resources.objects.values('tag', 'crocs_id__specifications', 'pluto_id__flag', 'pluto_id__settings') 

json_data= json.dumps([item for item in resources]) 
관련 문제