Имейте в виду, что QuerySet - это не просто запрос к базе данных, поэтому «ожидаемый результат» должен заключаться в том, что он содержит дополнительную информацию.Один простой способ сделать то, что вы хотите (и я бы сказал, что это путь Django), - это определить менеджер моделей , который возвращает только то, что вы хотите.Что-то вроде:
import simplejson
class StreamManager(models.Manager):
def all_serialized(self):
qset = super(StreamManager, self).get_query_set()
return simplejson.dumps(
[{ 'id':item.id,
'name':item.name,
'network':item.network.name,
'score':item.score,
'custom_url':item.custom_url,}
for item in qset])
, затем поместите objects = StreamManger()
в свой класс Stream, и вы можете получить доступ к потоку как Stream.objects.all_serialized ()
Другой способ сделать это -подкласс QuerySet, поэтому он возвращает только необходимую информацию, а затем использует метод serialize () в наборе запросов, но я никогда не вникал в это и предполагал, что для этого потребуются некоторые знания о том, как QuerySets работает под капотом (это может быть немного большеэффективнее, чем мое решение, но, поскольку цель состоит в том, чтобы сериализовать все, и вы хотите выполнить поиск внешнего ключа для каждой записи, чтобы найти имя сети, я предполагаю, что вы не работаете с огромным количеством данных).
РЕДАКТИРОВАТЬ: в отношении вашего комментария к решению Роба см. документацию для serialize () - вы можете определить поля, которые вы хотите сериализовать, но я не думаю, что он поддерживает поиск по внешнему ключу, и вывсе еще получите его в формате QuerySet (pk, модель и поля).