使用QuerySet.values()时获取模型实例

时间:2017-04-21 13:19:16

标签: django django-orm

假设我有两个模型,一个引用另一个:

class Shelf(models.Model):
     pass

class Book(models.Model):
     shelf = models.ForeignKey(Shelf)

我想在values()个实例的QuerySet上使用Book

In [1]: Book.objects.create(shelf=Shelf.objects.create())
Out[1]: <Book: Book object>

In [2]: Book.objects.values()
Out[2]: [{'id': 1, 'shelf_id': 1}]

问题是返回的词典只包含相关Shelf实例的主键而不是实例本身。有没有办法在单个查询中获取实际实例? E.g:

In [2]: Book.objects.values()
Out[2]: [{'id': 1, 'shelf': <Shelf: Shelf object>}]

我使用values()的原因是我可以为不同的模型合并两个QuerySet,我想在视图中对它进行排序和渲染。

1 个答案:

答案 0 :(得分:0)

根据docs

  

如果您有一个名为foo的字段,它是ForeignKey,则为默认值   values()调用将返回一个名为foo_id的字典键,因为这个   是存储实际值的隐藏模型属性的名称   (foo属性指的是相关模型)。

我认为默认values()实施是不可能的。您可以创建custom manager并覆盖values()方法,为模型的每个ForeignKey创建一个多级字典。