gpt4 book ai didi

python - 仅获取Django中相关对象的某些字段

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:59 24 4
gpt4 key购买 nike

假设我在 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对象,不适用于模型实例。我的问题是:有没有办法只使用“评论”对象来做同样的事情?它必须等于select name, email from users where id=comment.user_id 按复杂度(我不想在不需要的时候通过网络传输大量存储在某些字段中的数据)

最佳答案

如果你想对一些额外的用户数据进行评论,而不必检索整个 User 对象,我认为最好在获取评论时获取额外的数据:

Comment.objects.filter(user=user).values_list('user__name', 'user__email')

显然,您可以获取其他有用的 Comment 字段。

或者:

Comment.objects.filter(user=user).annotate(author_name=F('user__name'),\ 
author_email=F('user__email'))

这仍然使用 QuerySet API,但是这两种方法都允许您跨越关系以获得额外的数据而无需额外的查询。

关于python - 仅获取Django中相关对象的某些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41105955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com