Если у вас есть значительно больший объем данных , этот цикл по рабочему листу будет медленным. Вероятно, лучше сразу собрать все данные и обработать их в памяти.
Option Explicit
Sub test_selection()
' My below array is based on values contained within
' selected cells
' The purpose of using two dimensional array is to
' keep values in one column of array
' while retaining cell addresses in 2nd
' dimension to print some info in relevant cells
' offset to the selected cells
Dim i As Long, r As Long, c As String, anArray As Variant
With Selection
c = Split(.Cells(1).Address, "$")(1)
r = Split(.Cells(1).Address, "$")(2) - 1
anArray = .Columns(1).Cells.Resize(.Rows.Count, 2).Value2
End With
For i = LBound(anArray, 1) To UBound(anArray, 1)
anArray(i, 1) = CStr(anArray(i, 1))
anArray(i, 2) = "$" & c & "$" & i + r
Next i
TestGetFileList anArray
End Sub
Вы можете легко использовать список для переноса требуемого объекта, и это все, что нужно сериализаторам django для его правильной сериализации, например:
from django.core import serializers
# assuming obj is a model instance
serialized_obj = serializers.serialize('json', [ obj, ])
Не похоже, что вы можете сериализовать Например, вам нужно сериализовать QuerySet для одного объекта.
from django.core import serializers
from models import *
def getUser(request):
return HttpResponse(json(Users.objects.filter(id=88)))
У меня закончился выпуск svn
django, так что это может быть не так в более ранних версиях.
Похоже, что вы спрашиваете, включает в себя сериализацию структуры данных экземпляра модели Django для совместимости. Другие постеры верны: если вы хотите, чтобы сериализованная форма использовалась с приложением python, которое может запрашивать базу данных через API Django, то вы бы хотели сериализовать набор запросов с одним объектом. Если, с другой стороны, вам нужен способ заново наполнить экземпляр модели где-то еще, не касаясь базы данных или не используя Django, то у вас есть небольшая работа, которую нужно сделать.
Вот что я делаю:
Во-первых, я использую demjson
для конвертации. Это было то, что я нашел первым, но это может быть не лучшим. Моя реализация зависит от одной из ее функций, но должны быть аналогичные способы с другими конвертерами.
Во-вторых, Реализуйте метод json_equivalent
на всех моделях, которые вам могут потребоваться сериализовать. Это магический метод для demjson
, но, вероятно, вы захотите подумать о том, какую реализацию вы выберете. Идея состоит в том, что вы возвращаете объект, который напрямую конвертируется в json
(т. Е. Массив или словарь). Если вы действительно хотите сделать это автоматически:
def json_equivalent(self):
dictionary = {}
for field in self._meta.get_all_field_names()
dictionary[field] = self.__getattribute__(field)
return dictionary
Это не поможет вам, если у вас нет абсолютно плоской структуры данных (нет ForeignKeys
, только цифры и строки в базе данных и т. Д.). В противном случае вам следует серьезно подумать о правильном способе реализации этого метода.
В-третьих, позвоните demjson.JSON.encode (instance)
, и вы получите то, что хотите.
demjson
, но, вероятно, вы захотите подумать о том, какую реализацию вы выберете. Идея состоит в том, что вы возвращаете объект, который напрямую конвертируется в json
(т. Е. Массив или словарь). Если вы действительно хотите сделать это автоматически:
def json_equivalent(self):
dictionary = {}
for field in self._meta.get_all_field_names()
dictionary[field] = self.__getattribute__(field)
return dictionary
Это не поможет вам, если у вас нет абсолютно плоской структуры данных (нет ForeignKeys
, только цифры и строки в базе данных и т. Д.). В противном случае вам следует серьезно подумать о правильном способе реализации этого метода.
В-третьих, позвоните demjson.JSON.encode (instance)
, и вы получите то, что хотите.
demjson
, но, вероятно, вы захотите подумать о том, какую реализацию вы выберете. Идея состоит в том, что вы возвращаете объект, который напрямую конвертируется в json
(т. Е. Массив или словарь). Если вы действительно хотите сделать это автоматически:
def json_equivalent(self):
dictionary = {}
for field in self._meta.get_all_field_names()
dictionary[field] = self.__getattribute__(field)
return dictionary
Это не поможет вам, если у вас нет абсолютно плоской структуры данных (нет ForeignKeys
, только цифры и строки в базе данных и т. Д.). В противном случае вам следует серьезно подумать о правильном способе реализации этого метода.
В-третьих, позвоните demjson.JSON.encode (instance)
, и вы получите то, что хотите.
json
(т. Е. Массив или словарь). Если вы действительно хотите сделать это автоматически:
def json_equivalent(self):
dictionary = {}
for field in self._meta.get_all_field_names()
dictionary[field] = self.__getattribute__(field)
return dictionary
Это не поможет вам, если у вас нет абсолютно плоской структуры данных (нет ForeignKeys
, только цифры и строки в базе данных и т. Д.). В противном случае вам следует серьезно подумать о правильном способе реализации этого метода.
В-третьих, позвоните demjson.JSON.encode (instance)
, и вы получите то, что хотите.
json
(т. Е. Массив или словарь). Если вы действительно хотите сделать это автоматически:
def json_equivalent(self):
dictionary = {}
for field in self._meta.get_all_field_names()
dictionary[field] = self.__getattribute__(field)
return dictionary
Это не поможет вам, если у вас нет абсолютно плоской структуры данных (нет ForeignKeys
, только цифры и строки в базе данных и т. Д.). В противном случае вам следует серьезно подумать о правильном способе реализации этого метода.
В-третьих, позвоните demjson.JSON.encode (instance)
, и вы получите то, что хотите.
ville = UneVille.objects.get(nom='lihlihlihlih')
....
blablablab
.......
return HttpResponse(simplejson.dumps(ville.__dict__))
Я возвращаю dict своего экземпляра
, поэтому он возвращает что-то вроде {'field1': value, "field2": value, ....}
Я решил эту проблему, добавив метод сериализации в свою модель:
def toJSON(self):
import simplejson
return simplejson.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))
Вот подробный эквивалент для тех, кто не любит однострочники:
def toJSON(self):
fields = []
for field in self._meta.fields:
fields.append(field.name)
d = {}
for attr in fields:
d[attr] = getattr(self, attr)
import simplejson
return simplejson.dumps(d)
_meta.fields
- это упорядоченный список полей модели, к которым можно получить доступ из экземпляров и из самой модели.