我有两个Django模型,它们完全不相关。像这样:
class OldModel(models.Model):
name = models.CharField(max_length=100)
class NewModel(models.Model):
name = models.CharField(max_length=100)
它们都有大量的记录。我只想从NewModel
中筛选出那些名称等于OldModel
中某个记录的记录。使用Django ORM最快、最有效的方法是什么?你知道吗
Tags:
new_models = NewModel.objects.filter( name__in=OldModel.objects.all().values_list('name', flat=True) )
这将导致对数据库的select查询被折叠。要查看原始sql查询,只需键入
print new_models.query
。你知道吗我只能考虑用平面值列表调用
name__in
查找。你知道吗这应该转换成像这样的SQL查询
您还可以考虑
extra
语句,它允许创建查询的优化版本请参阅此处的文档
https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.extra
你应该使用它的
where / tables
部分。但这也不是原始的Django ORM。你知道吗要获得更准确的SQL查询,请使用来自
OldModel._meta
和NewModel._meta
的信息,这将允许您不硬编码字段和表名称。你知道吗相关问题 更多 >
编程相关推荐