модели jqgrid и django - PullRequest
       13

модели jqgrid и django

0 голосов
/ 30 октября 2009

У меня есть следующие модели

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()  

Когда я строю структуру данных json для объекта EmpAddress с использованием сериализатора django, он не включает унаследованные поля, а только поля EmpAddress. Я знаю, что поля доступны в объекте в моем представлении, поскольку я могу их распечатать, но они не встроены в структуру json.

Кто-нибудь знает, как это преодолеть?

Спасибо
Andrew

Ответы [ 3 ]

0 голосов
/ 30 октября 2009

Взгляните на: http://www.partisanpost.com/2009/10/django-jquery-jqgrid-example-one/1/ как решение вашей проблемы. Полный сериализатор позволяет вам углубляться в связи с внешними ключами, насколько вам нужно. Я написал учебный пример того, как использовать его для интеграции django с JqGrid, который предоставляет пример того, с чем вы столкнулись. Надеюсь, это поможет.

0 голосов
/ 02 ноября 2009

Джон,

Это код вида, который я использую вместе с моделями:

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")

Когда я печатаю адреса объектов после
addresses = EmpAddress.objects.filter(employee__id=employeeId)
У меня есть все атрибуты объектов (поля Address и EmpAddress).

Но когда я печатаю объект json, у меня только атрибуты объекта EmpAddress, исключая атрибуты Address.

0 голосов
/ 30 октября 2009

Наследование моделей Django может получить немного хитро . Если вы явно не требуете, чтобы EmpAddress был подклассом Address, вы можете просто захотеть дублировать поля и позволить типу утки обрабатывать тот факт, что вы не следуете традиционному объектно-ориентированному дизайну. Например:

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()

Еще один выстрел в темноте, который вы можете попробовать - использовать jsonpickle (я один из разработчиков), который "умнее", чем стандартный модуль json. последний код имеет несколько замечательных новых функций, благодаря davvid .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...