Как LEFT OUTER JOIN без внешнего ключа, используя django ormPython

Программы на Python
Anonymous
Как LEFT OUTER JOIN без внешнего ключа, используя django orm

Сообщение Anonymous »

У меня есть следующие модели:
class User(Model):
###
user fields
###

class CaseModel(Model):
id = # django build in id field
owner = models.ForeignKey('User')
###
other fields
###

class DraftMessageModel(Model):
entity_id = models.IntegerField(null=True, blank=True) # CaseModel.id is linked to this
###
other fields
###

Мне нужно создать набор запросов, который генерирует следующий SQL:
SELECT
C.id,
C.some_field,
D.another_field,
U.username,
< some extra fields >
FROM
CaseModel AS C
LEFT OUTER JOIN User AS U ON (C.owner_id = U.id)
LEFT OUTER JOIN DraftMessageModel AS D ON (C.id = D.entity_id)
WHERE
C.owner_id = 100
AND < some extra condition >


Я знаю, что это тривиальный вопрос, но я не смог с ним справиться queryset.extra или queryset.annotate(draft_message=FilteredRelation()).
Вот что я пробовал:
  • queryset.annotate
queryset = CaseModel.objects.select_related('owner').filter(owner_id=100)

queryset = queryset.annotate(
draft_message=FilteredRelation(
'draftmessagemodel',
condition=Q(draftmessagemodel__entity_id=F('id'))
)
)
# error: Cannot resolve keyword 'draftmessagemodel' into field. Choices are:

Подробнее здесь: https://stackoverflow.com/questions/788 ... django-orm

Вернуться в «Python»