django - Django:在没有额外 SQL 的情况下获取外键字段的值到 DB
问题描述
模型
class Photo(models.Model):
doc_pic = models.ImageField(upload_to='specialist/', default='', null=True, blank=True, max_length=250)
doctor = models.ForeignKey(Doctor, blank=True, null=True, on_delete=models.SET_NULL, related_name='photos')
我查询照片
temp = Photo.objects.all()
现在我想要保存在医生字段中的医生 ID(对于第一个元素)
print(temp[0].doctor)
我收到了 Doctor 对象。但我想要数字 ID。我怎么能得到那个?
我知道我可以得到它
temp[0].doctor.id
但这会向我想避免的数据库提交另一个查询。
解决方案
如果添加 a ForeignKey
,您实际上已经构建了两个属性:
fieldname
那是对相关实例的引用;和fieldname_id
这是真正的数据库列,它存储了它所引用的表的主键。
所以你可以写:
temp[0].doctor_id
如果您只对 感兴趣doctor_id
,而对其他字段不感兴趣,则可以使用以下方法提高查询效率values_list
:
Photo.objects.values_list('doctor_id', flat=True).first()
其实如果使用values_list
,这里可以doctor
直接作为字段使用,它只会返回标识符,不会返回对应的Doctor
实例:
# equivalent to values_list with doctor_id
Photo.objects.values_list('doctor', flat=True).first()
推荐阅读
- npm - Pycharm SASS:在相对目录中输出css
- jquery - 最大调用堆栈大小超出错误但仅在某些 div
- bash - Shell 脚本从文件中读取名称值对
- jsf - 从 ajax 调用重新加载和刷新表
- vue.js - 我无法将 Bootstrap 样式导入 vue-cli 项目
- python-3.x - Pandas:基于分位数的自定义排名函数
- html - 为什么图像源为空时会添加黑线?
- c++ - 我正在尝试用 C++ 做一个方程式,但它一直输出 1
- sql-server - SQL Server 在转换为 varchar 时更改了 float 列中的值
- python-3.x - ImportError:无法从“sklearn.preprocessing”导入名称“Imputer”