假设我在 Django 中有这样的模型:
class User(models.Model):
name=models.CharField(...)
email=models.EmailField(...)
photo=...
<other fields>
class Comment(models.Model):
user=models.ForeignKey(User, ...)
我有一个函数,它接收 Comment 对象,并且只需要姓名和电子邮件字段来发送电子邮件(这只是一个示例,很明显)
def sendEmail(comment):
name, email=comment.user.name, comment.user.email
在上面提供的实现中,Django 将获取相关对象 User 的所有字段(大致相当于 select * from users where id=comment.user_id
)。
使用 values_list,可以仅获取所需字段:
Users.objects.filter(id=comment.user_id).values_list('name', 'email')
但是 values_list 仅适用于 QuerySet 对象,而不适用于模型实例。
我的问题是:是否有任何方法仅使用“comment”对象来执行相同的操作?
它必须与 select name, email from users where id=comment.user_id
的复杂度相等(我不想在不需要时传输存储在某些字段中的大量数据)。
ForeignKey
能够部分获取相关对象,而无需显式查询集吗? - dhkeComment
是一个属性,它返回上述查询的结果。我想到的其他解决方案都需要使用自定义的ForwardManyToOneDescriptor,这就有点过度了。 - dhke