模型
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
但是这会向我想要避免的数据库提交另一个查询。
答案 0 :(得分:3)
如果添加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()