Django-获取外键对象列表

新手上路,请多包涵

可以说我有以下模型:

 class ParentModel(models.Model):
    name = models.CharField()
    child = models.ForeignKey("ChildModel")

class ChildModel(models.Model):
    name = models.CharField()

现在,给定 ParentModels 的一些过滤器,我想检索所有子模型的列表。我努力了:

 children = ParentModel.objects.filter(name__startswith='A').values_list('child', flat=True)

然而,这会返回一个 ChildModel id 列表,而不是完整的对象。是否有一个查询集函数可以完成我正在尝试做的事情,或者我是否需要使用返回的 ID 编写一个额外的过滤器查询?即 - 而不是:

 children => [51L, 53L, 54L]

我想:

 children => [<ChildModel: ChildModel Object>, <ChildModel: ChildModel Object>, <ChildModel: ChildModel Object>]

原文由 MarkD 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 621
2 个回答

您可以将子查询与 __in 一起使用:

 Child.objects.filter(parent__in=Parent.objects.filter(name__startswith='A'))

(请注意,您的命名在这里有点奇怪:通常孩子是带有外键的那个,因为它假定父母可以有多个孩子。)

原文由 Daniel Roseman 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是 Django 站点上的一个活跃问题: https ://code.djangoproject.com/ticket/8144

你有两个选择:

  1. 编写自己的查询集子类
  2. 添加另一个过滤器以获取您检索到的 ID 的对象

我知道如何实施选项 2,所以这是我的方法:

选项#2:

 children_ids = ParentModel.objects.filter(name__startswith='A').values_list('child', flat=True)
children = ChildModel.objects.filter(pk__in=children_ids)

原文由 Pablo Estrada 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题