2010-05-30 2 views
1

Итак, вот что я хочу сделать. У меня есть модель Персонал, у которого есть внешний ключ для модели пользователя. У меня также есть модель Match, которая имеет внешний ключ для модели User.Вопрос о модели django API

Я хочу выбрать, сколько соответствует каждому персоналу. Я не знаю, как это сделать, пока я работал только для модели User. От штата, это не позволит аннотировать Матч.

Это то, что работает прямо сейчас

User.objects.annotate(amount=Count("match")).filter(Q(amount__gt=0)).order_by("amount") 

И это то, что я хотел сделать

Staff.objects.annotate(amount=Count("match")).filter(Q(amount__gt=0)).order_by("amount") 

И, кстати, есть ли способ, чтобы фильтровать матчи? Я хочу фильтровать совпадения определенным столбцом.

ответ

1

Это не будет работать?

Staff.objects.annotate(ammount=Count("user__match")).filter(Q(ammount__gt=0)).order_by("ammount") 
+0

Genius !! Большое спасибо Лакшману, это было именно то, что мне нужно! – Clash

1

Если у персонала и матча есть внешние ключи от пользователя, но не друг с другом, нет такой вещи, как «сколько совпадений у каждого персонала». Для каждого пользователя есть несколько сотрудников и совпадений, поэтому просто невозможно узнать, какой Персонал для пользователя связан с тем, для которого подходит тот же пользователь.

Это не ограничение Django - это логическое ограничение, навязанное тем, как вы структурировали свои отношения.

+0

Спасибо за ваш ответ Daniel! Хорошо, но в любом случае не нужно выбирать всех пользователей, которые являются персоналом, а затем выбирать все соответствия для этих пользователей, а затем применять некоторые фильтры и агрегации? – Clash

+0

@ Clash нет никакого разумного способа, но, возможно, вы могли бы выбрать весь штат, получить идентификатор для каждого пользователя в персонале, а затем выбрать все объекты Match, у которых есть внешний ключ в списке этих идентификаторов пользователей. –

Смежные вопросы