python - 如何过滤 django 中的相关字段?
问题描述
假设我有与模型公司具有多对多关系的模型用户;和模型 UserType,它连接到 User 和 Company。像这样:
class User(models.Model):
name = models.TextField()
class Company(models.Model):
name = models.TextField()
users = models.ManyToManyField(User, related_name="companies")
class UserType(models.Model):
name = models.TextField()
company = models.ForeignKey(Company, related_name="user_types")
users = models.ManyToManyField(User, related_name="user_types")
我想找到公司中的所有用户,这很简单:User.objects.filter(companies=some_company)
. 但是,我还想过滤user_types
返回的用户对象上的字段,以便只返回连接到给定公司的 UserType 对象。用代码来解释它,这应该返回 true:
def check_user_types(users, company):
for user in users:
for user_type in user.user_types:
if user_type.company != company:
return false
return true
我该怎么做?
解决方案
我想到了。对于任何面临同样问题的人,这解决了它:
from django.db.models import Prefetch
users = User.objects.filter(companies=company).prefetch_related(
Prefetch(
"user_types",
queryset=UserType.objects.filter(company=company),
)
)
推荐阅读
- django - 经理不可用;'auth.User' 已替换为 'members.CustomUser'
- c# - 无法从控制台应用程序向 Web api 发送/接收客户端证书
- laravel-nova - Laravel Nova:如何仅在更新资源时隐藏字段
- android - Android - 向通知添加意图
- rest - vCenter REST API - 使用网络参数部署模板
- bash - 如何通过使用 Shell 脚本在不同数据之间添加标题行将 CSV 转换为 Excel?
- javascript - 谷歌地图,为 zoomControlOptions 位置添加边距
- java - 找到 N 个通过给定条件的第一个元素:求和给定的数字
- mysql - 如何在 MySQL 中存储视频文件
- mongodb - MissingSchemaError:尚未为模型“博客”注册架构