簡體   English   中英

Django查詢多個表中沒有外鍵

[英]Django query in multiple tables without foreign key

我的模特看起來像這樣

class Trans(models.Model):
    id = models.CharField(primary_key=True, max_length=60)
    sys = models.ManyToManyField(Sys)
    flag = models.CharField(max_length=15, blank=True, null=True)

class Sys(models.Model):
    id = models.CharField(primary_key=True, max_length=64)
    mid = models.CharField(max_length=15, blank=True, null=True)
    numbers = models.IntegerField(blank=True, null=True)
    org = models.CharField(max_length=100, blank=True, null=True)

我想在Trans中旬獲取組織編號 ,並像這樣在Templete中使用它們

{% for row in rowlist %}
    {{ row.mid }}  //in Trans
    {{ row.flag }}  //in Trans
    {{ row.org }}  //in Sys when mid=Trans.mid
    {{ row.numbers }}//in Sys when mid=Trans.mid

SQL應該是

SELECT Sys.numbers, Sys.org FROM Sys, Trans WHERE Trans.mid = Sys.mid

如何在Django中進行這樣的查詢? 我試過了

cursor.execute("SELECT * From trans, sys")
rowlist = cursor.fetchone()

返回我需要的但是彎曲的

我不知道你為什么要這么做,但是,
我認為這可以解決您的問題:

mid_list = Trans.objects.values_list('mid', flat=True)
rowlist = Sys.objects.filter(mid__in=mid_list)

編輯1

class Trans(models.Model):
    id = models.CharField(primary_key=True, max_length=60)
    sys = models.ManyToManyField(Sys, through='TranSys')
    flag = models.CharField(max_length=15, blank=True, null=True)

class Sys(models.Model):
    id = models.CharField(primary_key=True, max_length=64)
    mid = models.CharField(max_length=15, blank=True, null=True)
    numbers = models.IntegerField(blank=True, null=True)
    org = models.CharField(max_length=100, blank=True, null=True)

class TranSys(models.Model):
    trans = models.Foreingkey(Trans)
    sys = models.ForeignKey(Sys)

現在,只需使用:

rowlist = TranSys.objects.values('sys__org', 'sys__numbers','sys__mid','trans__flag')

我建議將其設置為外鍵,因為它應該是。

你可以做這樣的事情。

trans_mid = Trans.objects.values('mid')
syss = Sys.objects.filter(mid__in=trans_mid)

另外,您可以使用raw_sql執行此類查詢。

最好是在Sys類中作為ForeignKey獲得成功。 這樣你就可以像直接訪問;

sys_list = Sys.objects.filter(
    mid__in=Trans.objects.values('mid')
).values('numbers', 'org')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM