mysql - 如何在 Django 中将所有相关数据库与 FK 连接起来?
问题描述
我在进行查询时遇到问题。在 shell 中,我一直面临的“用户”没有拆分错误。并想知道如何查询这些模型。
select i.id, i.name, i.email, i.memo, g.id, g.name, i.birthday, i.regdt, n.number, t.name, t.id
from webcontact_info as i
inner join webcontact_number as n on i.id = n.info_id
inner join webcontact_group as g on i.group_id = g.id
inner join webcontact_type as t on n.type_id = t.id;
mysql中的这个查询。如何更改为 Django 的查询?请帮我解决这个问题。
这些是models.py
class Group(models.Model):
name = models.CharField(max_length=20)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Type(models.Model) :
name = models.CharField(max_length=20)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Info(models.Model):
name = models.CharField(max_length=20)
email = models.EmailField(null=True, blank=True, unique=True)
memo = models.CharField(max_length=200, null=True)
birthday = models.CharField(max_length=12,null=True, blank=True)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
regdt = models.DateTimeField(auto_now_add=True)
updatedt = models.DateTimeField(auto_now_add=True)
class Number(models.Model):
number = models.CharField(max_length=11)
info = models.ForeignKey(Info, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
type = models.ForeignKey(Type, on_delete=models.CASCADE)
regdt = models.DateTimeField(auto_now_add=True)
updatedt = models.DateTimeField(auto_now_add=True)
解决方案
您可以将相关对象与您的对象一起使用。但也许你正在寻找select_related
.
它将返回选择额外的相关对象数据 - 它将大大提高查询性能。
infos = Info.objects.select_related('user', 'group', 'user__number')
.
在django 文档中查看更多详细信息
推荐阅读
- php - Laravel Eloquent 在查询中比较日期时遇到问题
- jsf - javax.el.PropertyNotFoundException: /index.xhtml @23,97 action="#{execise04.getInput}": 目标无法到达,标识符 'execise04' 解析为 null
- azure-sqldw - Azure SQL DW 表未使用计算节点上的所有分布来存储数据
- python - 获取图像中圆的坐标
- google-sheets - Excel公式确定最大系列模式
- botframework - Microsoft.Bot.Connector.BotState。
- 操作返回无效状态代码“未授权” - python - Python - 组合来自 2 个文件的元素
- swift - 使 UITableView Header 在用户输入单元格时自动调整大小
- google-apps-script - 收到电子邮件时触发的 Google gmail 脚本
- reactjs - 从实用程序模块访问 Redux 存储