2016-07-07 2 views
0

У меня есть модель Django, как это (например):новообращенного Джанго таблица Сыроватского

class Books(models.Model): 
    id = models.IntegerField(unique=True, null=False, primary_key=True) 
    name = models.CharField(null=True, max_length=255) 
    author = models.ForeignKey(Author) 

И мне нужно, чтобы преобразовать все данные в этой модели Сыроватский:

[{'author':1, 'books':[{'id':1, 'name':'Book1'}, {'id':2, 'name':'Book2'}]}, {'author':2, 'books':[{'id':3, 'name':'Book1'}, {'id':4, 'name':'Book2'}]}.....] 

Как я могу сделай это?

Я пытался использовать model_to_dict:

books = Books.objects.all() 
data = model_to_dict(books, fields = ['author', 'id', 'name']) 

Но у меня есть ошибка QuerySet' object has no attribute '_meta'

То же с books = Books.objects.values()

+1

djangorestframework сделает это очень простым для вас, по сути вам нужно написать сериализатор – Sayse

+0

Ваш пример не является dict, это список. Вы хотите сгруппировать по автору? – Gocht

+0

@ Gocht да, мне нужна группа по автору. – NONAMA

ответ

0

Я нашел решение.

authors = Books.objects.distinct('author') 
    authids = [] 
    for a in authors: 
     authids.append(a.author.id) 
    data = [] 
    for aid in authids: 
     adict = {} 
     books = Metro.objects.filter(author=aid) 
     blist = [] 
     for b in books: 
      book = {} 
      book['id'] = b.id 
      book['name'] = b.name 
      blist.append(book) 
     adict['aid'] = aid 
     adict['books'] = blist 
     data.append(adict) 
    out = simplejson.dumps(data) 
    return HttpResponse(out, content_type="application/json") 

Он выглядит не очень оптимизированным, но он определенно работает.

Смежные вопросы