parent
b7d3b057f3
commit
e69348b4e7
|
@ -11,7 +11,7 @@ Then, just do this::
|
||||||
|
|
||||||
>>> from django.db import connection
|
>>> from django.db import connection
|
||||||
>>> connection.queries
|
>>> connection.queries
|
||||||
[{'sql': 'SELECT polls_polls.id,polls_polls.question,polls_polls.pub_date FROM polls_polls',
|
[{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
|
||||||
'time': '0.002'}]
|
'time': '0.002'}]
|
||||||
|
|
||||||
``connection.queries`` is only available if :setting:`DEBUG` is ``True``.
|
``connection.queries`` is only available if :setting:`DEBUG` is ``True``.
|
||||||
|
|
|
@ -31,7 +31,7 @@ the file ``mysite/news/models.py``::
|
||||||
return self.full_name
|
return self.full_name
|
||||||
|
|
||||||
class Article(models.Model):
|
class Article(models.Model):
|
||||||
pub_date = models.DateTimeField()
|
pub_date = models.DateField()
|
||||||
headline = models.CharField(max_length=200)
|
headline = models.CharField(max_length=200)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
reporter = models.ForeignKey(Reporter)
|
reporter = models.ForeignKey(Reporter)
|
||||||
|
@ -96,8 +96,8 @@ access your data. The API is created on the fly, no code generation necessary::
|
||||||
DoesNotExist: Reporter matching query does not exist. Lookup parameters were {'id': 2}
|
DoesNotExist: Reporter matching query does not exist. Lookup parameters were {'id': 2}
|
||||||
|
|
||||||
# Create an article.
|
# Create an article.
|
||||||
>>> from datetime import datetime
|
>>> from datetime import date
|
||||||
>>> a = Article(pub_date=datetime.now(), headline='Django is cool',
|
>>> a = Article(pub_date=date.today(), headline='Django is cool',
|
||||||
... content='Yeah.', reporter=r)
|
... content='Yeah.', reporter=r)
|
||||||
>>> a.save()
|
>>> a.save()
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ as registering your model in the admin site::
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
class Article(models.Model):
|
class Article(models.Model):
|
||||||
pub_date = models.DateTimeField()
|
pub_date = models.DateField()
|
||||||
headline = models.CharField(max_length=200)
|
headline = models.CharField(max_length=200)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
reporter = models.ForeignKey(Reporter)
|
reporter = models.ForeignKey(Reporter)
|
||||||
|
|
|
@ -32,11 +32,11 @@ A simple example is the best illustration of this. Suppose we have the
|
||||||
following model, which would represent entries in a Weblog::
|
following model, which would represent entries in a Weblog::
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
class Entry(models.Model):
|
class Entry(models.Model):
|
||||||
title = models.CharField(maxlength=250)
|
title = models.CharField(maxlength=250)
|
||||||
body = models.TextField()
|
body = models.TextField()
|
||||||
pub_date = models.DateTimeField()
|
pub_date = models.DateField()
|
||||||
enable_comments = models.BooleanField()
|
enable_comments = models.BooleanField()
|
||||||
|
|
||||||
Now, suppose that we want the following steps to be applied whenever a
|
Now, suppose that we want the following steps to be applied whenever a
|
||||||
|
@ -55,11 +55,11 @@ Accomplishing this is fairly straightforward and requires very little
|
||||||
code::
|
code::
|
||||||
|
|
||||||
from django.contrib.comments.moderation import CommentModerator, moderator
|
from django.contrib.comments.moderation import CommentModerator, moderator
|
||||||
|
|
||||||
class EntryModerator(CommentModerator):
|
class EntryModerator(CommentModerator):
|
||||||
email_notification = True
|
email_notification = True
|
||||||
enable_field = 'enable_comments'
|
enable_field = 'enable_comments'
|
||||||
|
|
||||||
moderator.register(Entry, EntryModerator)
|
moderator.register(Entry, EntryModerator)
|
||||||
|
|
||||||
The :class:`CommentModerator` class pre-defines a number of useful moderation
|
The :class:`CommentModerator` class pre-defines a number of useful moderation
|
||||||
|
|
|
@ -983,10 +983,10 @@ define the details of how the relation works.
|
||||||
this with functions from the Python ``datetime`` module to limit choices of
|
this with functions from the Python ``datetime`` module to limit choices of
|
||||||
objects by date. For example::
|
objects by date. For example::
|
||||||
|
|
||||||
limit_choices_to = {'pub_date__lte': datetime.now}
|
limit_choices_to = {'pub_date__lte': datetime.date.today}
|
||||||
|
|
||||||
only allows the choice of related objects with a ``pub_date`` before the
|
only allows the choice of related objects with a ``pub_date`` before the
|
||||||
current date/time to be chosen.
|
current date to be chosen.
|
||||||
|
|
||||||
Instead of a dictionary this can also be a :class:`~django.db.models.Q`
|
Instead of a dictionary this can also be a :class:`~django.db.models.Q`
|
||||||
object for more :ref:`complex queries <complex-lookups-with-q>`. However,
|
object for more :ref:`complex queries <complex-lookups-with-q>`. However,
|
||||||
|
|
|
@ -135,7 +135,7 @@ access to more than a single field::
|
||||||
raise ValidationError('Draft entries may not have a publication date.')
|
raise ValidationError('Draft entries may not have a publication date.')
|
||||||
# Set the pub_date for published items if it hasn't been set already.
|
# Set the pub_date for published items if it hasn't been set already.
|
||||||
if self.status == 'published' and self.pub_date is None:
|
if self.status == 'published' and self.pub_date is None:
|
||||||
self.pub_date = datetime.datetime.now()
|
self.pub_date = datetime.date.today()
|
||||||
|
|
||||||
Any :exc:`~django.core.exceptions.ValidationError` exceptions raised by
|
Any :exc:`~django.core.exceptions.ValidationError` exceptions raised by
|
||||||
``Model.clean()`` will be stored in a special key error dictionary key,
|
``Model.clean()`` will be stored in a special key error dictionary key,
|
||||||
|
|
|
@ -1945,6 +1945,17 @@ SQL equivalent::
|
||||||
You can use ``range`` anywhere you can use ``BETWEEN`` in SQL — for dates,
|
You can use ``range`` anywhere you can use ``BETWEEN`` in SQL — for dates,
|
||||||
numbers and even characters.
|
numbers and even characters.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
Filtering a ``DateTimeField`` with dates won't include items on the last
|
||||||
|
day, because the bounds are interpreted as "0am on the given date". If
|
||||||
|
``pub_date`` was a ``DateTimeField``, the above expression would be turned
|
||||||
|
into this SQL::
|
||||||
|
|
||||||
|
SELECT ... WHERE pub_date BETWEEN '2005-01-01 00:00:00' and '2005-03-31 00:00:00';
|
||||||
|
|
||||||
|
Generally speaking, you can't mix dates and datetimes.
|
||||||
|
|
||||||
.. fieldlookup:: year
|
.. fieldlookup:: year
|
||||||
|
|
||||||
year
|
year
|
||||||
|
@ -1958,7 +1969,7 @@ Example::
|
||||||
|
|
||||||
SQL equivalent::
|
SQL equivalent::
|
||||||
|
|
||||||
SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31 23:59:59.999999';
|
SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31';
|
||||||
|
|
||||||
(The exact SQL syntax varies for each database engine.)
|
(The exact SQL syntax varies for each database engine.)
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,8 @@ Create a few Reporters::
|
||||||
|
|
||||||
Create an Article::
|
Create an Article::
|
||||||
|
|
||||||
>>> from datetime import datetime
|
>>> from datetime import date
|
||||||
>>> a = Article(id=None, headline="This is a test", pub_date=datetime(2005, 7, 27), reporter=r)
|
>>> a = Article(id=None, headline="This is a test", pub_date=date(2005, 7, 27), reporter=r)
|
||||||
>>> a.save()
|
>>> a.save()
|
||||||
|
|
||||||
>>> a.reporter.id
|
>>> a.reporter.id
|
||||||
|
@ -65,7 +65,7 @@ database, which always returns unicode strings)::
|
||||||
|
|
||||||
Create an Article via the Reporter object::
|
Create an Article via the Reporter object::
|
||||||
|
|
||||||
>>> new_article = r.article_set.create(headline="John's second story", pub_date=datetime(2005, 7, 29))
|
>>> new_article = r.article_set.create(headline="John's second story", pub_date=date(2005, 7, 29))
|
||||||
>>> new_article
|
>>> new_article
|
||||||
<Article: John's second story>
|
<Article: John's second story>
|
||||||
>>> new_article.reporter
|
>>> new_article.reporter
|
||||||
|
@ -75,7 +75,7 @@ Create an Article via the Reporter object::
|
||||||
|
|
||||||
Create a new article, and add it to the article set::
|
Create a new article, and add it to the article set::
|
||||||
|
|
||||||
>>> new_article2 = Article(headline="Paul's story", pub_date=datetime(2006, 1, 17))
|
>>> new_article2 = Article(headline="Paul's story", pub_date=date(2006, 1, 17))
|
||||||
>>> r.article_set.add(new_article2)
|
>>> r.article_set.add(new_article2)
|
||||||
>>> new_article2.reporter
|
>>> new_article2.reporter
|
||||||
<Reporter: John Smith>
|
<Reporter: John Smith>
|
||||||
|
|
|
@ -35,8 +35,8 @@ models, which comprise a Weblog application:
|
||||||
blog = models.ForeignKey(Blog)
|
blog = models.ForeignKey(Blog)
|
||||||
headline = models.CharField(max_length=255)
|
headline = models.CharField(max_length=255)
|
||||||
body_text = models.TextField()
|
body_text = models.TextField()
|
||||||
pub_date = models.DateTimeField()
|
pub_date = models.DateField()
|
||||||
mod_date = models.DateTimeField()
|
mod_date = models.DateField()
|
||||||
authors = models.ManyToManyField(Author)
|
authors = models.ManyToManyField(Author)
|
||||||
n_comments = models.IntegerField()
|
n_comments = models.IntegerField()
|
||||||
n_pingbacks = models.IntegerField()
|
n_pingbacks = models.IntegerField()
|
||||||
|
@ -233,7 +233,7 @@ refinements together. For example::
|
||||||
>>> Entry.objects.filter(
|
>>> Entry.objects.filter(
|
||||||
... headline__startswith='What'
|
... headline__startswith='What'
|
||||||
... ).exclude(
|
... ).exclude(
|
||||||
... pub_date__gte=datetime.now()
|
... pub_date__gte=datetime.date.today()
|
||||||
... ).filter(
|
... ).filter(
|
||||||
... pub_date__gte=datetime(2005, 1, 30)
|
... pub_date__gte=datetime(2005, 1, 30)
|
||||||
... )
|
... )
|
||||||
|
@ -258,8 +258,8 @@ stored, used and reused.
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
>> q1 = Entry.objects.filter(headline__startswith="What")
|
>> q1 = Entry.objects.filter(headline__startswith="What")
|
||||||
>> q2 = q1.exclude(pub_date__gte=datetime.now())
|
>> q2 = q1.exclude(pub_date__gte=datetime.date.today())
|
||||||
>> q3 = q1.filter(pub_date__gte=datetime.now())
|
>> q3 = q1.filter(pub_date__gte=datetime.date.today())
|
||||||
|
|
||||||
These three ``QuerySets`` are separate. The first is a base
|
These three ``QuerySets`` are separate. The first is a base
|
||||||
:class:`~django.db.models.query.QuerySet` containing all entries that contain a
|
:class:`~django.db.models.query.QuerySet` containing all entries that contain a
|
||||||
|
@ -282,7 +282,7 @@ actually run the query until the :class:`~django.db.models.query.QuerySet` is
|
||||||
*evaluated*. Take a look at this example::
|
*evaluated*. Take a look at this example::
|
||||||
|
|
||||||
>>> q = Entry.objects.filter(headline__startswith="What")
|
>>> q = Entry.objects.filter(headline__startswith="What")
|
||||||
>>> q = q.filter(pub_date__lte=datetime.now())
|
>>> q = q.filter(pub_date__lte=datetime.date.today())
|
||||||
>>> q = q.exclude(body_text__icontains="food")
|
>>> q = q.exclude(body_text__icontains="food")
|
||||||
>>> print(q)
|
>>> print(q)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue