假设我有以下模型:
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)
但是,这将返回子模型ID的列表,而不是完整的对象。是否有一个queryset函数可以完成我正在尝试的操作,或者我需要使用返回的id编写一个附加的筛选查询?一、 e.-代替:
children => [51L, 53L, 54L]
我想要:
children => [<ChildModel: ChildModel Object>, <ChildModel: ChildModel Object>, <ChildModel: ChildModel Object>]
可以将子查询与
__in
一起使用:(注意,这里的命名有点奇怪:通常子项是带有外键的,因为它假定父项可以有多个子项。)
我认为您可能需要重构您的模型,使其类似于:
然后,您可以执行以下操作来接收
ChildModel
的queryset列表:这将被解释为“每个父模型可以有许多子模型”
这是Django网站上的一个活跃问题: https://code.djangoproject.com/ticket/8144
你有两个选择:
我知道如何实施方案2,所以我的方法是:
选项2:
相关问题 更多 >
编程相关推荐