Похоже, что ваши модели не очень дружелюбны к "джанго".Используете ли вы отношения один-к-одному, а ваша таблица pk - это внешние ключи?(Если нет, опубликуйте свою схему в вопросе).Django предпочитает, чтобы первичные ключи вашей таблицы (модели) были уникальными целыми числами с автоматическим приращением, а не внешними ключами.
django, в этом случае это лучше:
class TableC(models.Model):
name = models.CharField(max_length=1000)
class TableA(models.Model):
tablec = models.OneToOneField(TableC)
class TableB(models.Model):
tablec = models.OneToOneField(TableC)
year = models.IntegerField()
Обратите внимание, что все поля имеют (неявный) идентификаторполе, которое является первичным ключом для таблицы.А теперь выполните:
TableA.objects.filter(tablec__tableb__year__exact=2011)
Вы можете фактически использовать внешний ключ в качестве первичного ключа:
class TableC(models.Model):
name = models.CharField(max_length=1000)
class TableA(models.Model):
tablec = models.OneToOneField(TableC, primary_key=True, db_column='id')
class TableB(models.Model):
tablec = models.OneToOneField(TableC, primary_key=True, db_column='id')
year = models.IntegerField()
И выполнить тот же запрос.Однако это может вызвать у вас некоторые проблемы позже («без гарантии»).