主键

时间:2016-12-12 20:47:06

标签: python django postgresql django-models

我的模特

class Despacho (models.Model):  
    bus=models.ForeignKey(Bus)  
    contador = models.IntegerField()
    cerrado = models.BooleanField(editable=False)

class Bus(models.Model):    
    numero_bus=models.CharField(max_length=255,unique=True)
    en_ruta = models.BooleanField(editable=False)   

我需要一个查询来提取我保存总线的数据,然后输入一个 公交车的号码,我需要知道是否有发货 匹配搜索尝试执行以下查询

我的数据库是postgresql

d = Despacho.objects.raw('''SELECT * FROM operaciones_despacho WHERE operaciones_despacho.bus =  '%s' AND operaciones_despacho.cerrado = '%s'                                                    
;'''%(bus.numero_bus,False)) 
  

错误:列operaciones_despacho.bus不存在

1 个答案:

答案 0 :(得分:0)

首先在Django中,我们仅在罕见的情况下使用原始sql,因为它特别难以编写ORM查询。在这种情况下,编写ORM查询比原始查询更容易和更短。

Despacho.objects.filter(bus=bus).filter(cerrado=False)

在需要执行原始查询的极少数情况下,请注意使用原始params参数而不是字符串格式。编写原始查询的正确方法是

Despacho.objects.raw('''SELECT * FROM operaciones_despacho WHERE operaciones_despacho.bus =  '%s' AND operaciones_despacho.cerrado = '%s'''' ,
 [bus.numero_bus,False]) 

但我再次强调你不应该在这里使用原始查询,因为它是一个简单的ORM查询。