首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-queryset无外键连接

Django-queryset无外键连接
EN

Stack Overflow用户
提问于 2013-10-25 12:54:34
回答 4查看 37.3K关注 0票数 29

model.py

代码语言:javascript
复制
class Tdzien(models.Model):
  dziens = models.SmallIntegerField(primary_key=True, db_column='DZIENS')
  dzienrok = models.SmallIntegerField(unique=True, db_column='ROK')


class Tnogahist(models.Model):
  id_noga = models.ForeignKey(Tenerg, primary_key=True, db_column='ID_ENERG')
  dziens = models.SmallIntegerField(db_column='DZIENS')

我想要的是让id_noga在哪里dzienrok=1234。我知道沙钦斯应该是

代码语言:javascript
复制
dziens = models.ForeignKey(Tdzien)

但事实并非如此,我也无法改变这一点。通常我会用这样的方法

代码语言:javascript
复制
Tnogahist.objects.filter(dziens__dzienrok=1234)

但是我不知道如何加入和过滤那些没有外键的桌子。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-25 13:50:42

可以通过执行原始sql查询连接两个表。但在这种情况下,这是相当讨厌的,所以我建议您重写您的models.py。

您可以检查如何执行此这里

会是这样的:

代码语言:javascript
复制
from django.db import connection

def my_custom_sql(self):
    cursor = connection.cursor()    
    cursor.execute("select id_noga
                    from myapp_Tnogahist a
                    inner join myapp_Tdzien b on a.dziens=b.dziens
                    where b.dzienrok = 1234")
    row = cursor.fetchone()
    return row
票数 22
EN

Stack Overflow用户

发布于 2013-10-25 12:57:24

据我所知,没有没有外键的联接,但您可以使用两个查询:

Tnogahist.objects.filter(dziens__in=Tdzien.objects.filter(dzienrok=1234))

票数 24
EN

Stack Overflow用户

发布于 2014-04-02 18:22:06

你能用.extra做这个吗?来自https://docs.djangoproject.com/en/dev/ref/models/querysets/#extra

地点/表格 通过使用where,您可以定义显式SQL子句--也许可以执行非显式联接。可以通过使用表手动将表添加到SQL子句中。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19590483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档