Джанго: Упрощение длинного присоединения? - PullRequest
2 голосов
/ 19 декабря 2010

У меня есть несколько длинных запросов (для проверки возможностей), которые выглядят так:

widgets = Widget.objects.filter(
    Q(owner__memberships = current_user),
    Q(owner__memberships__memberships__capabilities__name = "widget_list")
)

Есть ли какой-нибудь разумный способ упростить этот запрос? Или мне просто нужно с этим жить?

Соответствующие модели:

class Widget(m.Model):
    owner = m.ForeignKey(Group)

class Group(m.Model):
    memberships = m.ManyToManyField(User, through=GroupMembership)

class GroupMembership(m.Model):
    user = m.ForeignKey(User)
    group = m.ForeignKey(Group)
    capabilities = m.ManyToMany(Capability)

class Capability(m.Model):
    name = m.CharField(...)

1 Ответ

1 голос
/ 19 декабря 2010

Вам не нужно заключать параметры в объекты Q (), вы можете напрямую использовать пары ключ / значение:

widgets = Widget.objects.filter(
    owner__memberships = current_user,
    owner__memberships__memberships__capabilities__name = "widget_list"
)
...