Change your "datetime.now()"s in your manager to "datetime.now"s. The
callable version will be called every time, rather than only once at
the start of the process.

Regards
Scott


On May 11, 2:08 pm, Malcolm Box <malcolm....@gmail.com> wrote:
> Hi,
>
> I've run into a weird bug that has me scratching my head - I'm seeing
> inconsistent results from a queryset between various apache processes and
> the django shell.  I.e. sometimes a GET gives me the right response (as it
> hits a "correct" Apache instance) and other times it gives a wrong
> response.  Restarting Apache causes problem to go away, but it resurfaces
> later.
>
> I have a Poll class which has a start_time and an end_time, both of which
> are optional, plus an enabled field.  A poll is considered active if it's
> enabled, and if it has a start_time then now > start_time, and if it has an
> end_time then now < end_time.
>
> What I'm seeing is that sometimes polls with a start_time that is before now
> are not showing up in the responses when I do a series of GETs.  So e.g.
> first GET - shows poll, second one - doesn't show, third - doesn't, fourth -
> does and so on.
>
> From a fresh python shell, the Poll.objects.active() call always gives the
> right results.
>
> The code in question is:
>
> class PollManager(models.Manager):
>     def active(self):
>         qs = super(PollManager, self).get_query_set().filter(enabled=True)
>         q_start = Q(start_time__isnull=True) |
> Q(start_time__lte=datetime.datetime.now())
>         q_end = Q(end_time__isnull=True) |
> Q(end_time__gte=datetime.datetime.now())
>         return qs.filter(q_start,q_end)
>
> Where the models are is:
>
> class Event(models.Model):
>        enabled = models.BooleanField() # automatic default false
>        .... other fields
>
> class Poll(models.Model):
>     event = models.ForeignKey(Event, db_index=True)
>     enabled = models.BooleanField() # automatic default false
>     start_time = models.DateTimeField(blank=True, null=True, help_text="Time
> to enable this poll (optional)")
>     end_time = models.DateTimeField(blank=True, null=True, help_text="Time
> to close this poll (optional)")
>
>     objects = PollManager()
>
> The view logic is basically:
>
> def view_polls(request, event_id):
>         filtered_set =  self.queryset._clone()    # Queryset is
> Poll.objects.active().filter(event__enabled = True)
>         filtered_set = filtered_set.filter(event__id=event_id)
>         return render_to_response(template, filtered_set)
>
> (this has been elided and adapted - original code is using django-rest-api,
> JSON responder etc.  But the call boils down to this)
>
> I'm confused as to what the problem could be - any clues?
>
> Cheers,
>
> Malcolm
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To post to this group, send email to django-us...@googlegroups.com.
> To unsubscribe from this group, send email to 
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group 
> athttp://groups.google.com/group/django-users?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to