Django запрос многие ко многим - PullRequest
1 голос
/ 06 февраля 2011

Hello У меня есть следующая модель:

class Participation(models.Model):
    workflow_activity = models.ForeignKey('WorkflowActivity')
    user = models.ForeignKey(User)
    role = models.ForeignKey(Role)
    current = models.BooleanField()

Это таблица «многие ко многим». Я хочу отфильтровать экземпляры workflow_activity, которые имеют одно из следующих условий:

  1. Пользователи не назначены, т. Е. Нет записей для этого workflow_activity в таблице участия.
  2. Нет текущих активных пользователей, т. Е. Где все строки для workflow_activity в таблице участия имеют current==False

Помощь в построении запроса будет высоко ценится!

EDIT:

Привет всем, спасибо за ответы. Я предполагаю, что я, вероятно, подхожу к этой вещи неправильно. Мое требование заключается в том, что я создаю своего рода систему тикетов, которая имеет функцию автоматического назначения, которая назначает пользователей тикетам на основе некоторой логики выбора. Я запускаю функцию назначить как периодическое задание (используя сельдерей), но для этого мне нужно выбрать билеты, которые в настоящее время не назначены для текущего состояния заявки. Текущее логическое значение используется, чтобы отметить, назначен ли конкретный пользователь текущему состоянию заявки.

Есть идеи / мысли по реализации этого?

Edit2

Вот тот, о котором я подумал:

class WorkflowActivity(models.Model):
    ...
    ...
    assigned_to = models.ManytoManyField('Participation') # older table without the current field
    current = models.ManytoManyField('Current')

class Current(models.Model):
    participant = models.ForeignKey('Participation')

Достаточно хреновый, я знаю, но это то, что я мог придумать, какие-нибудь другие варианты?

1 Ответ

1 голос
/ 07 февраля 2011

Для # 1 это должно работать:

from django.db.models import Count

WorkflowActivity.objects.annotate(users=Count('participation__user')).filter(users=0)

К сожалению, нет хорошего способа сделать # 2, используя только встроенные модули в ORM Джанго. Вы можете попробовать расширить тип Count, как предложено в Ticket 11305 .

Edit:

Если вам интересно найти все WorkflowActivities, в которых есть хотя бы один активный User, вы можете сделать:

WorkflowActivity.objects.filter(participation__current=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...