2016-07-07 75 views
0

我有這樣一個Django模型(例如):轉換Django的表與dict

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) 

,我需要的所有數據轉換在這個模型與dict:

[{'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

你的例子不是字典,是一個列表。你想按作者分組? – 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") 

它看起來沒有那麼優化,但它絕對有效。