Аннотируйте по наследованию мультитаблицы в Django

У меня есть основная модель LoggedEvent, и многим моделям подкласса нравится, следует:

class LoggedEvent(models.Model):
    user = models.ForeignKey(User, blank=True, null=True)
    timestamp = models.DateTimeField(auto_now_add=True)

class AuthEvent(LoggedEvent):
    good = models.BooleanField()
    username = models.CharField(max_length=12)

class LDAPSearchEvent(LoggedEvent):
    type = models.CharField(max_length=12)
    query = models.CharField(max_length=24)

class PRISearchEvent(LoggedEvent):
    type = models.CharField(max_length=12)
    query = models.CharField(max_length=24)

Пользователи генерируют эти события, поскольку они делают связанные действия. Я пытаюсь генерировать отчет использования о том, сколько из каждого типа события каждый пользователь вызвал в прошлом месяце. Я борюсь с ORM Django и в то время как я близок, я сталкиваюсь с проблемой. Вот код запроса:

def usage(request):
    # Calculate date range
    today = datetime.date.today()
    month_start = datetime.date(year=today.year, month=today.month - 1, day=1)
    month_end = datetime.date(year=today.year, month=today.month, day=1) - datetime.timedelta(days=1)

    # Search for how many LDAP events were generated per user, last month
    baseusage = User.objects.filter(loggedevent__timestamp__gte=month_start, loggedevent__timestamp__lte=month_end)
    ldapusage = baseusage.exclude(loggedevent__ldapsearchevent__id__lt=1).annotate(count=Count('loggedevent__pk'))
    authusage = baseusage.exclude(loggedevent__authevent__id__lt=1).annotate(count=Count('loggedevent__pk'))

    return render_to_response('usage.html', {
        'ldapusage' : ldapusage,
        'authusage' : authusage,
    }, context_instance=RequestContext(request))

И ldapusage и authusage являются оба списком пользователей, каждый пользователь аннотировал атрибутом .count, который, как предполагается, представляет, сколько конкретных событий тот пользователь генерировал. Однако в обоих списках, атрибуты .count являются тем же значением. Infact аннотируемое 'количество' равно тому, сколько событий, которые пользователь генерировал, независимо от типа. Таким образом, казалось бы что мое определенное

authusage = baseusage.exclude(loggedevent__authevent__id__lt=1)

не исключает подклассом. Я попробовал идентификатор __ lt=1, идентификатор __ isnull=True, и другие. Halp.

5
задан ldlework 14 May 2010 в 20:32
поделиться