假设我有两个模型,一个引用另一个:
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,我想在视图中对它进行排序和渲染。
答案 0 :(得分:0)
根据docs:
如果您有一个名为foo的字段,它是ForeignKey,则为默认值 values()调用将返回一个名为foo_id的字典键,因为这个 是存储实际值的隐藏模型属性的名称 (foo属性指的是相关模型)。
我认为默认values()
实施是不可能的。您可以创建custom manager并覆盖values()
方法,为模型的每个ForeignKey
创建一个多级字典。