多表繼承我有一個基地LoggedEvent模型和一些子類車型的喜歡如下:因爲他們做了相關行動標註了在Django
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)
用戶生成這些事件。我正在嘗試生成一份使用情況報告,說明每個用戶在上個月造成的每種事件類型的數量。我正在用Django的ORM掙扎,而當我靠近時,我遇到了一個問題。下面是查詢代碼:
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屬性都是相同的值。事實上,註釋的「計數」等於用戶生成的事件數量,無論類型如何。所以它似乎是我的具體
authusage = baseusage.exclude(loggedevent__authevent__id__lt=1)
不是按子類排除。我試過id__lt = 1,id__isnull = True等。 HALP。