【问题标题】:convert django table to dict将 django 表转换为 dict
【发布时间】:2016-07-07 15:05:34
【问题描述】:

我有一个这样的 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)

而且我需要把这个模型中的所有数据都转换成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()相同

【问题讨论】:

  • djangorestframework 会让你很简单,本质上你需要写一个序列化器
  • 你的例子不是一个字典,是一个列表。你想按作者分组吗?
  • @Gocht 是的,我需要按作者分组。
  • @Sayse 我知道,但在这个项目中它不是可选的。
  • 你的数据库是什么?

标签: python json django django-models


【解决方案1】:

我找到了解决办法。

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

它看起来没有那么优化,但它确实有效。

【讨论】:

    猜你喜欢
    • 2018-11-15
    • 2013-05-25
    • 2018-10-14
    • 2015-04-29
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多