z = Pokes.objects.filter(
pokestiming__when_start__lte=datetime.now(),
pokestiming__when_end__gte=datetime.now(),
pokestiming__next_poke__lte=datetime.now(),
poke_deleted=0,
poke_operating=1,
)
That's a query I'm using. It selects any Poke object, with a PokesTiming object (foreign key) within the date ranges. It's basically a start date and expiry date.
Problem is, passing datetime.now(), and even though it seems to be the exact same syntax in the django docs, the SQL result is:
SELECT [fieldnames] FROM
pokes
INNER JOINpokes_timing
ON (pokes
.id
=pokes_timing
.poke_id
) WHERE (pokes
.poke_deleted
= 0 ANDpokes_timing
.when_start
<= 2010-02-01 00:00:00 ANDpokes_timing
.next_poke
<= 2010-02-01 13:50:48 ANDpokes_timing
.when_end
>= 2010-02-01 13:50:48 ANDpokes
.poke_operating
= 1 ) LIMIT 21
That is, the dates passed are just dates, not wrapped in string quotes, which results in an error and no results. That query ^ was retrieved by this method
I'm sure I'm missing something silly
Models:
class Pokes(models.Model):
poke_title = models.CharField(max_length=135)
poke_text = models.TextField()
poke_email = models.CharField(max_length=450)
poke_email_verified = models.IntegerField(null=True, blank=True)
poke_key = models.CharField(max_length=30)
poke_operating = models.IntegerField(default=0)
poke_deleted = models.IntegerField(default=0)
class Meta:
db_table = u'pokes'
def __unicode__(self):
return self.poke_title
class PokesTiming(models.Model):
poke = models.ForeignKey(Pokes)
interval_min = models.IntegerField(null=True, default=30)
interval_max = models.IntegerField(null=True, default=120)
when_start = models.DateTimeField()
when_end = models.DateTimeField()
last_run = models.DateTimeField()
is_single = models.IntegerField(default=0)
next_poke = models.DateTimeField()
class Meta:
db_table = u'pokes_timing'
def __unicode__(self):
return self.poke