![](/img/trans.png)
[英]Django retrieve data from multiple tables without foreign key relationship
[英]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)
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.