Можно вот так.
Создаём модели:
from django.db import models
class A(models.Model):
title = models.CharField(max_length=10)
class B(models.Model):
title = models.CharField(max_length=10)
class C(models.Model):
link_a = models.OneToOneField(A)
link_b = models.OneToOneField(B)
title = models.CharField(max_length=10)
Делаем выборку:
from django.db import connection
from main.models import A, B, C
A(title='testA').save()
B(title='testB').save()
a = A.objects.get(id=1)
b = B.objects.get(id=1)
C(title='testC', link_a=a, link_b=b).save()
c = C.objects.filter(link_a=a, link_b=b)
Смотрим запросы:
>>> for i in connection.queries:
... print i['sql']
...
INSERT INTO "main_a" ("title") VALUES (testA)
INSERT INTO "main_b" ("title") VALUES (testB)
SELECT "main_a"."id", "main_a"."title" FROM "main_a" WHERE "main_a"."id" = 1
SELECT "main_b"."id", "main_b"."title" FROM "main_b" WHERE "main_b"."id" = 1
INSERT INTO "main_c" ("link_a_id", "link_b_id", "title") VALUES (1, 1, testC)
SELECT "main_c"."id", "main_c"."link_a_id", "main_c"."link_b_id", "main_c"."title" FROM "main_c" WHERE "main_c"."id" = 1
SELECT "main_c"."id", "main_c"."link_a_id", "main_c"."link_b_id", "main_c"."title" FROM "main_c" WHERE ("main_c"."link_b_id" = 1 AND "main_c"."link_a_id" = 1 ) LIMIT 21