如何在 Django 中将所有相关数据库与 FK 连接? [英] How to connect all related DB with FK in Django?

查看:53
本文介绍了如何在 Django 中将所有相关数据库与 FK 连接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在进行查询时遇到问题.在我一直面对的 shell 中,用户"没有拆分错误.并想知道如何查询这些模型.

I got problem in making Queries. In the shell I all the time faced 'user' has no split error. and want to know how to make query about those models.

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 的查询?请帮我解决这个问题.

this query in mysql. how can i change into query for Django? please help me about this.

那些是models.py

those are 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.

You can just use your related object with your object. But maybe you're looking for select_related.

它将返回选择其他相关对象数据 - 这将大大提高查询性能.

It will return selecting additional related-object data - It will boost query performance bit much.

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

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

Check more detail in django docs

这篇关于如何在 Django 中将所有相关数据库与 FK 连接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆