Помогите с формированием запроса к базе средствами django.
Необходимо получить queryset, содержащий все транзакции (Transaction) у которых владелец (Owner) клиента (Client) = Остап Бендер
Так выглядят модели:
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'Остап Бендер'])
как это сделать лучше и правильнее? Моя писанина сильно тормозит
Updated 27 May 2015, 21:52 by botinag.