2009-10-30 8 views
0

I가 다음과 같은 모델 있는 jqGrid와 장고 모델

class Employee(Person): 
    job = model.Charfield(max_length=200) 
class Address(models.Model): 
    street = models.CharField(max_length=200) 
    city = models.CharField(max_length=200) 
class EmpAddress(Address): 
    date_occupied = models.DateField() 
    date_vacated = models.DateField() 
    employee = models.ForeignKey() 

나는 단지 상속 된 필드 EmpAddress 필드를 포함하지 않는 serialzer 장고를 사용하여 EmpAddress 개체의 JSON 데이터 구조를 구축

. 필자가 인쇄 할 수있는 필드는 객체 뷰에서 볼 수 있지만 json 구조에는 내장되어 있지 않습니다.

누구든지 이것을 극복하는 방법을 알고 있습니까? 장고 모델의

감사
앤드류

답변

0

상속는 little tricky를 얻을 수 있습니다. EmpAddress가 주소의 하위 클래스가되도록 명시 적으로 요구하지 않는 한 필드를 복제하여 오리 유형 지정이 기존 객체 지향 디자인을 따르지 않는다는 사실을 처리하게 할 수 있습니다. 예컨대 :

class Address(models.Model): 
    street = models.CharField(max_length=200) 
    city = models.CharField(max_length=200) 

class EmpAddress(Address): 
    street = models.CharField(max_length=200) 
    city = models.CharField(max_length=200) 
    date_occupied = models.DateField() 
    date_vacated = models.DateField() 
    employee = models.ForeignKey() 

당신이 시도 할 수 어둠 속에서 또 다른 슛은 표준 JSON 모듈보다 더 "똑똑"인 (필자는 개발자의 사람이야) jsonpickle을 사용하는 것입니다. latest code에는 davvid 덕분에 몇 가지 새로운 기능이 추가되었습니다.

+0

이들은 내 모델이 아니므로 나는 그들과 함께 일하고있어 그들이 그대로 있어야합니다. 나는 jsonpickle을 조사 할 것이다. 감사. –

0

문제의 해결책은 http://www.partisanpost.com/2009/10/django-jquery-jqgrid-example-one/1/입니다. 전체 시리얼 라이저를 사용하면 이동해야하는만큼 외래 키 관계로 드릴 다운 할 수 있습니다. 장고를 JqGrid와 통합하는 데 사용하는 방법에 대한 자습서 예제를 작성했습니다. JqGrid는 직면 한 것의 예를 제공합니다. 희망이 도움이됩니다.

+0

그것은 내가 기반으로하는 예가 외래 키에서 작동하지만 상속을 무시합니다. serializer에서 관계 매개 변수를 사용하면 모든 직원 데이터를 얻지 만 Address에서 상속 된 필드를 가져 오지 않습니다. 나는 serializer에 대한 코드를 살펴 봤는데 그것이 나에게 보이는 것은 전달 된 모델의 로컬 필드와 만 작업하고있는 것 같다.하지만 나는 아직도 이것을 배우면서 그 코드를 오해 할 수있다. –

+0

아마도 귀하는 귀하의보기 코드를 게시 할 수 있습니다. 이것은 해결책을 찾는 데 도움이 될 것입니다. – John

+0

위의 코드를 봅니다. –

0

존,

이것은 모델과 함께 사용하는보기 코드입니다. 나는
addresses = EmpAddress.objects.filter(employee__id=employeeId)
라인 후 주소 개체를 인쇄 할 때

def address_grid(request): 
    employeeId = request.GET.get('employeeId') 

    if request.GET.get('sidx') == '': 
    order = 'date_occupied' 
    else: 
    order = request.GET.get('sidx') 

    if request.GET.get('sord') == 'asc': 
    sort_order = '' 
    else: 
    sort_order = '-' 

    order = sort_order + order 

    if request.GET.get('page'): 
    paginated = int(request.GET.get('page')) 
    else: 
    paginated = 1 

    items = int(request.GET.get('rows')) 

    addresses = EmpAddress.objects.filter(employee__id=employeeId) 
    for add in addresses: 
    log.write(add.city+'\n') # Field from address object  

    total = adresses.all().count() 

    if total % items > 0: 
    items_sum = 1 
    else: 
    items_sum = 0 

    pages = total/items + items_sum 

    if paginated > pages: 
    paginated = 1 

    addresses = addresses.order_by(order)[paginated-1)*items:paginated*items] 

    rows = serializers.serialize("json", addresses, indent=4,) 

    addresses = '{total:%(pages)s, page:%(page)s, records:%(total)s, rows:%(addresses)s' \ 
      % {'pages':pages, 'page':paginated, 'total':total, 'addresses':rows} 

    log.write(rows+'\n') #json object no Address fields (city is not included) 
         #even it is present above 


    return HttpResonse(addresses, mimetype="application/json") 

나는 모든 개체는 (모두 주소 및 EmpAddress 필드) 속성이있다.

그러나 json 개체를 인쇄 할 때 주소 특성을 제외한 EmpAddress 개체 특성 만 있습니다.