Так выглядят модели:
class Transaction(models.Model): id = models.IntegerField(db_column='id') # <-- Тут id из таблицы clientdetails, но не всегда ...много полей... class Meta: managed = False db_table = 'transactions' class Client(models.Model): id = models.IntegerField(db_column='id', primary_key=True) name = models.CharField(db_column='name', max_length=50) ...много полей... class Meta: managed = False db_table = 'clientdetails' class Owner(models.Model): name = models.CharField(db_column='name', max_length=40) # <-- Тут name из clientdetails, но не всегда owner = models.CharField(db_column='owner', max_length=50) # <-- Тут много имен, среди которых нужен только Остап Бендер ...много полей... class Meta: managed = False db_table = 'owner'
вот такой корявый sql запрос у меня получился:
select transactions.* from transactions join (select clientdetails.id, owner.owner from clientdetails join owner on clientdetails.name = owner.name where owner.owner = 'Остап Бендер') as t on t.id = transactions.id
Вот так я сделал это средствами джанго:
Transaction.objects.extra(tables=['clientdetails', 'owner'], where=[u'''transactions.id = clientdetails.id and clientdetails.name = owner.name and owner.owner = %s'''], params=[u'Остап Бендер'])
как это сделать лучше и правильнее? Моя писанина сильно тормозит