假设我在Django有这样的模特:
class User(models.Model):
name=models.CharField(...)
email=models.EmailField(...)
photo=...
<other fields>
class Comment(models.Model):
user=models.ForeignKey(User, ...)
我有一个接收Comment对象的函数,只需要name和email字段就可以发送电子邮件(很明显,这只是一个示例)
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
按复杂性(不需要时,我不想通过网络传输存储在某些字段中的大量数据)
如果您希望有带有一些额外用户数据的注释,而不必检索整个
User
对象,我认为在获取注释时最好获取额外数据:显然,您可以获取其他有用的
Comment
字段。或:
这仍然使用
QuerySet
API,但是这两种方法都允许您跨越关系来获取额外的数据,而无需额外的查询。应该可以的
与此查询真正等价的是您已经拥有的:
那是绝对正确的。但是您需要考虑的是,一旦您有了这个queryset,就可以得到第一个元素,因为只有一个用户id,就只有一个用户:
相关问题 更多 >
编程相关推荐