我有两张桌子:
class Client(models.Model):
name = models.TextField()
lastname = models.TextField()
class Meta:
managed = False
db_table = 'client'
class Clientreport(models.Model):
id_client_home = models.ForeignKey('Client', models.DO_NOTHING, db_column='id_client_home', related_name='home_id_client_home')
id_client_reported = models.ForeignKey('Client', models.DO_NOTHING, db_column='id_client_reported', related_name='client_id_client_home')
class Meta:
managed = False
db_table = 'clientreport'
我正在尝试构建类似于此的查询:
SELECT cr.*, cl.id, cl.name, cl.lastname FROM Clientreport cr INNER JOIN Client cl ON cr.id_client_reported = cl.id
WHERE (LOWER(cl.name) LIKE LOWER('%jo%') OR LOWER(cl.lastname) LIKE LOWER('%jo%') )
我尝试过使用: SQL queries
但是,现在我正在尝试使用django。 如何使用django ???
访问已连接的模型答案 0 :(得分:3)
您可以使用标准的Django Queryset过滤器跨联接查询,使用__
来查看这样的关系:
Clientreport.objects.filter(client_id_client_home__name='jo')
client_id_client_home
是您related_name
模型中的Clientreport
。有关queries using related objects的文档中的更多信息。
要重现LIKE LOWER('%jo%')
,您可以使用__icontains
:
Clientreport.objects.filter(client_id_client_home__name__icontains='jo')