import time
import os

from django.db import models
from django.contrib import admin

if os.environ.get('READTHEDOCS'):
    TagField = lambda *args, **kwargs: None
else:
    from tagging.fields import TagField

class Event(models.Model):
    class Admin: pass

    when = models.DateTimeField()
    what = models.CharField(max_length=255)
    data = models.TextField(blank=True)
    tags = TagField(default="")

    def get_tags(self):
        return Tag.objects.get_for_object(self)

    def __str__(self):
        return "%s: %s" % (self.when, self.what)

    @staticmethod
    def find_events(time_from=None, time_until=None, tags=None):
        query = Event.objects.all()

        if time_from is not None:
            query = query.filter(when__gte=time_from)

        if time_until is not None:
            query = query.filter(when__lte=time_until)

        if tags is not None:
            for tag in tags:
                query = query.filter(tags__iregex=r'\b%s\b' % tag)

        result = list(query.order_by("when"))
        return result

    def as_dict(self):
        return dict(
            when=self.when,
            what=self.what,
            data=self.data,
            tags=self.tags,
            id=self.id,
        )

@@ -77,16 +77,68 @@
 rt admin
+%0Afrom tagging.managers import ModelTaggedItemManager
 %0A%0Aif os.
@@ -686,16 +686,112 @@
 =None):%0A
+%0A        if tags is not None:%0A            query = Event.tagged.with_all(tags)%0A        else:%0A    
         
@@ -818,16 +818,16 @@
 s.all()%0A
-
 %0A       
@@ -1003,133 +1003,8 @@
 l)%0A%0A
-        if tags is not None:%0A            for tag in tags:%0A                query = query.filter(tags__iregex=r'%5Cb%25s%5Cb' %25 tag)%0A
 %0A   
@@ -1249,16 +1249,16 @@
 elf.id,%0A
-
         
@@ -1259,8 +1259,162 @@
       )%0A
+%0A# We use this rather than tagging.register() so that tags can be exposed%0A# in the admin UI%0AModelTaggedItemManager().contribute_to_class(Event, 'tagged')%0A

Fix events to work on mysql