•  
  • 2
  •  
0

Django Many-to-Many сложный запрос

Есть модели:

class Owner(Model):
    pass

class Item(Model):
    owner = ForeignKey(Owner)
    tags = ManyToManyField('Tag', through='ItemTag')

class Tag(Model):
    name = CharField(max_length=255)

class = ItemTag(Model):
    item = ForeignKey(Item)
    tag = ForeignKey(Tag)

Требуется найти все Tag, связанные с Item'ами, принадлежащими некоторому Owner? На raw SQL это бы выглядело так:

SELECT t.id, t.name FROM tag t 
  JOIN itemtag it ON t.id = it.tag_id 
  JOIN item i ON i.id = it.item_id
  JOIN owner o ON o.id = it.owner_id
  WHERE o.id = <известный owner_id>

Как это сделать в рамках ORM?

python, django, orm.
спросил 856 дней назад Аватор пользователя pingw33n pingw33n
195 3
300

1 ответ:

    •  
    • 2
    •  

    После продолжительного общения я django понял, что не нужно заморачиваться на её ОРМ. Пока ОРМ предназначена для простых запросов, а сложные получаются слишком тормозными и не оптимизированными. Я к тому, что иногда лучше сделать raw запрос чем выдумывать ORM реализацию. Не уверен, но возможно tags = Tag.objects.filter(itemtag__item__owner=user) прокатит.

    ответил 856 дней назад Аватор пользователя tc tc
    718 15
Чтобы написать ответ, вы должны авторизироваться.