don';不要在django模型上使用内部联接

don';不要在django模型上使用内部联接,django,django-models,inner-join,Django,Django Models,Inner Join,我已经迁移了一个我想与django合作的现有数据库。我有以下型号: class Device(models.Model): class Meta: db_table = u'DEVICES' managed=False id = models.CharField(primary_key=True, max_length=22, db_column='DEVICE_ID') name = models.CharField(max_length

我已经迁移了一个我想与django合作的现有数据库。我有以下型号:

class Device(models.Model):
    class Meta:
        db_table = u'DEVICES'
        managed=False
    id = models.CharField(primary_key=True, max_length=22, db_column='DEVICE_ID')
    name = models.CharField(max_length=40, db_column='DEVICE_NAME')
    status = models.CharField(max_length=10, db_column='STATUS')

class DevicePort(models.Model):
    class Meta:
        db_table = u'DEVICE_PORT'
        managed=False
    id = models.CharField( primary_key=True, max_length=22, db_column='DEVICE_PORT_ID')
    device = models.OneToOneField(Device, db_column='DEVICE_ID')
    type = models.CharField( max_length=22, db_column='PORT_TYPE_ID')
    port_num = models.CharField( max_length=30, db_column='DEVICE_PORT_NUM')

class IP(models.Model):
    class Meta:
        db_table = u'IP_NODE'
        managed=False
    ip_address = models.CharField(primary_key=True, max_length=15, db_column='IP_NODE_NO')
    hostname = models.CharField(max_length=40, db_column='IP_HOST')
    port = models.OneToOneField(DevicePort, db_column='DEVICE_PORT_ID')
    status = models.CharField(max_length=50, db_column='IP_NODE_STATUS')
我想要一个
设备
及其关系
IP.IP\u地址
IP.hostname
s的列表。在SQL中,我将执行以下操作:

SELECT UNIQUE
    d.device_name device
FROM 
    IP_NODE c, 
    DEVICES d, 
    DEVICE_PORT e
WHERE
    c.ip_node_no = b.ip_node_no 
  AND c.device_port_id = e.device_port_id 
  AND e.device_id = d.device_id 
  AND d.device_name LIKE 'something';

我如何使用django模型来实现这一点?

因此,您需要的不是内部联接…而是隐式联接?我在这里遗漏了什么,因为隐式连接在大多数情况下都比显式连接慢

[http://postgresql.1045698.n5.nabble.com/explicit-JOIN-faster-than-implicit-td1920335.html][1]


我看不出您有什么理由想这样做,但如上所述,您可以通过使用raw甚至connection.cursor编写自己的查询来实现这一点。也许我甚至可以用额外的(表格=[…])来完成,尽管我不确定,因为我从来没有用过这样的表格。

好吧,让我开心。为什么不想让它使用
内部联接
?您可以始终执行自己的SQL语句,而不是让ORM指定所使用的语句:感谢链接;很有趣。。。无论如何,我想我应该重新表述一下这个问题:我的问题是我想要不同的
设备
s及其相关的
IP
s-因为
设备
没有任何对
设备端口
IP
的引用,我不确定如何继续。干杯,我不知道你在说什么。在您的代码中,
设备
设备端口
之间的关系非常清楚。