首页 > 解决方案 > 如何在 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)

标签: mysqldjango

解决方案


您可以将相关对象与您的对象一起使用。但也许你正在寻找select_related.

它将返回选择额外的相关对象数据 - 它将大大提高查询性能。

infos = Info.objects.select_related('user', 'group', 'user__number').

在django 文档中查看更多详细信息


推荐阅读