2014-01-14 4 views
0

저는 Django의 전체 초보자입니다. & Python!Django 참조 된 객체의 지연로드 데이터

def companyDetails(request, id): 
    property = MyCompany.objects.filter(uniqueid=id) 
    output = serializers.serialize('json',property, fields=('uniqueid','name','country',city') 
    return HttpResponse(output, content_type="application/json") 
:

나는 내가 이런 식으로 쿼리를 수행 models.py

class MyUser(models.Model): 
    useruniqueid = models.AutoField(primary_key=True) #BigIntegerField(primary_key=True) 
    name = models.CharField(max_length=50) 
    nickname = models.CharField(max_length=50) 
    phonenumber = models.CharField(max_length=20, unique=True) 
    class Meta: 
     managed = True 
     db_table = 'myuser' 

에 다음과 같은 클래스 내 views.py에서 참고 MyUser

class MyCompany(models.Model): 
    uniqueid = models.AutoField(primary_key=True) #BigIntegerField(primary_key=True) 
    user = models.ForeignKey(MyUser, db_column='useruniqueid') 
    name = models.CharField(max_length=50) 
    country = models.CharField(max_length=100) 
    city = models.CharField(max_length=100) 
    class Meta: 
     managed = True 
     db_table = 'mycompany' 

을 참조하여 다른 클래스가

나는 전화와 닉네임과 같은 사용자 필드를 직렬화하고 싶습니다. 어떻게 할 수 있습니까, 나는 tutoria를 읽었습니다. l뿐만 아니라 https://docs.djangoproject.com/en/1.6/ref/models/relations/하지만 그럴 수 있습니다.

답변

0

Django 시리얼 라이저는 외부 키를 확장 할 수있는 유연성이 없습니다. 또한 쿼리 세트를 직렬화하면 더 이상 게으르게로드되지 않습니다. 그래서 가장 유연한 옵션은 JSON 문서를 직접 작성하는 것이라고 생각합니다. 예 :

import json 

def companyDetails(request, id): 
    json_doc = [] 
    for c in MyCompany.objects.filter(uniqueid=id): 
     jobj = {} 
     jobj['uniqueid'] = c.uniqueid 
     jobj['name'] = c.name 
     jobj['country'] = c.country 
     jobj['city'] = c.city 
     jobj['user'] = {"name": c.user.name, 
         "nickname": c.user.nickname, 
         "phonenumber": c.user.phonenumber} 
     json_doc.append(jobj) 
    return HttpResponse(json.dumps(json_doc, indent=2), content_type="application/json") 
+0

하나의 회사 만 있고 단 한 명의 사용자 (CEO) 만있는 경우 왜 루프로 실행해야합니까? –

+0

회사가 한 개이라도,'filter'는 QuerySet을 반환 할 것이므로 첫 번째 요소를 인덱싱해야합니다. 그렇지 않으면 ['get'] (https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-a-single-object-with-get)를 사용하여 하나의 요소를 가져와 제거 할 수 있습니다. 루프. – arocks