【问题标题】:get record from multiple tables without foreign key relation django从没有外键关系django的多个表中获取记录
【发布时间】:2014-04-28 11:33:09
【问题描述】:

我有两个 django 模型

class Users(models.Model):
    id=models.ForeignKey(VirtualMachines, null=True)
    email=models.EmailField(null=True)

class UsersDomains(models.Model):
    domain_email = models.EmailField(null=True)
    domain=models.CharField(null=True)

我想使用内连接从这些表中选择记录。模型之间没有关系,所以我不能使用 select_related。我的sql查询是:

SELECT u.*, du.* FROM
users u 
JOIN user_domain du 
ON du.domain_email = u.email 

不使用 select_related 如何将 django ORM 查询写入与我的 sql 查询相同的记录。

谢谢!

【问题讨论】:

    标签: django join orm


    【解决方案1】:

    也许这会有所帮助 -

    http://www.caktusgroup.com/blog/2009/09/28/custom-joins-with-djangos-queryjoin/

    基本上它只是使用queryset.query.join 添加您想要的任何连接..

    【讨论】:

    • 示例中的两个模型之间有many2many关系。这对我有用吗?因为我没有模型之间的关系。
    【解决方案2】:

    我不知道你为什么说这两个模型之间没有关系。你:它只使用一个字符字段而不是一个ID。这仍然是一个完全有效的外键。您应该像这样声明您的 UserDomain:

    class UsersDomains(models.Model):
        domain_email = models.ForeignKey(Users, to_field='email', null=True)
    

    并将unique=True 添加到 Users.domain 字段,现在 Django 将自动执行正确的操作。

    【讨论】:

    • 感谢@Daniel 指出这一点。我最终做了你提到的同样的事情。它现在工作完美。
    • 在将字段转换为 ForeignKey 后,我收到此错误 '' 'bool' object has no attribute 'startswith' ''。
    • @Daniel Roseman 如果我有一个独一无二的组合键,我该如何实现呢
    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2014-03-23
    相关资源
    最近更新 更多