Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
django
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
django
Commits
e0837f2c
Kaydet (Commit)
e0837f2c
authored
Eki 05, 2015
tarafından
Tim Graham
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Fixed #25508 -- Modified QuerySet.__repr__() to disambiguate it from a list.
üst
3543fec3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
134 additions
and
133 deletions
+134
-133
query.py
django/db/models/query.py
+1
-1
overview.txt
docs/intro/overview.txt
+5
-5
tutorial02.txt
docs/intro/tutorial02.txt
+8
-9
tutorial05.txt
docs/intro/tutorial05.txt
+1
-1
contenttypes.txt
docs/ref/contrib/contenttypes.txt
+3
-3
tutorial.txt
docs/ref/contrib/gis/tutorial.txt
+4
-6
fields.txt
docs/ref/contrib/postgres/fields.txt
+39
-39
functions.txt
docs/ref/contrib/postgres/functions.txt
+1
-1
database-functions.txt
docs/ref/models/database-functions.txt
+1
-1
querysets.txt
docs/ref/models/querysets.txt
+17
-17
1.10.txt
docs/releases/1.10.txt
+2
-1
aggregation.txt
docs/topics/db/aggregation.txt
+1
-1
many_to_many.txt
docs/topics/db/examples/many_to_many.txt
+0
-0
many_to_one.txt
docs/topics/db/examples/many_to_one.txt
+27
-27
one_to_one.txt
docs/topics/db/examples/one_to_one.txt
+6
-6
models.txt
docs/topics/db/models.txt
+6
-6
modelforms.txt
docs/topics/forms/modelforms.txt
+1
-1
tests.py
tests/fixtures_regress/tests.py
+6
-5
tests.py
tests/null_queries/tests.py
+1
-1
tests.py
tests/string_lookup/tests.py
+4
-2
No files found.
django/db/models/query.py
Dosyayı görüntüle @
e0837f2c
...
...
@@ -234,7 +234,7 @@ class QuerySet(object):
data
=
list
(
self
[:
REPR_OUTPUT_SIZE
+
1
])
if
len
(
data
)
>
REPR_OUTPUT_SIZE
:
data
[
-
1
]
=
"...(remaining elements truncated)..."
return
repr
(
data
)
return
'<QuerySet
%
r>'
%
data
def
__len__
(
self
):
self
.
_fetch_all
()
...
...
docs/intro/overview.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -73,7 +73,7 @@ necessary:
# No reporters are in the system yet.
>>> Reporter.objects.all()
[]
<QuerySet []>
# Create a new Reporter.
>>> r = Reporter(full_name='John Smith')
...
...
@@ -87,7 +87,7 @@ necessary:
# Now the new reporter is in the database.
>>> Reporter.objects.all()
[<Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>]>
# Fields are represented as attributes on the Python object.
>>> r.full_name
...
...
@@ -113,7 +113,7 @@ necessary:
# Now the article is in the database.
>>> Article.objects.all()
[<Article: Django is cool>]
<QuerySet [<Article: Django is cool>]>
# Article objects get API access to related Reporter objects.
>>> r = a.reporter
...
...
@@ -122,13 +122,13 @@ necessary:
# And vice versa: Reporter objects get API access to Article objects.
>>> r.article_set.all()
[<Article: Django is cool>]
<QuerySet [<Article: Django is cool>]>
# The API follows relationships as far as you need, performing efficient
# JOINs for you behind the scenes.
# This finds all articles by a reporter whose name starts with "John".
>>> Article.objects.filter(reporter__full_name__startswith='John')
[<Article: Django is cool>]
<QuerySet [<Article: Django is cool>]>
# Change an object by altering its attributes and calling save().
>>> r.full_name = 'Billy Goat'
...
...
docs/intro/tutorial02.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -401,7 +401,7 @@ Once you're in the shell, explore the :doc:`database API </topics/db/queries>`::
# No questions are in the system yet.
>>> Question.objects.all()
[]
<QuerySet []>
# Create a new Question.
# Support for time zones is enabled in the default settings file, so
...
...
@@ -432,8 +432,7 @@ Once you're in the shell, explore the :doc:`database API </topics/db/queries>`::
# objects.all() displays all the questions in the database.
>>> Question.objects.all()
[<Question: Question object>]
<QuerySet [<Question: Question object>]>
Wait a minute. ``<Question: Question object>`` is, utterly, an unhelpful representation
of this object. Let's fix that by editing the ``Question`` model (in the
...
...
@@ -494,14 +493,14 @@ Save these changes and start a new Python interactive shell by running
# Make sure our __str__() addition worked.
>>> Question.objects.all()
[<Question: What's up?>]
<QuerySet [<Question: What's up?>]>
# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
>>> Question.objects.filter(id=1)
[<Question: What's up?>]
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(question_text__startswith='What')
[<Question: What's up?>]
<QuerySet [<Question: What's up?>]>
# Get the question that was published this year.
>>> from django.utils import timezone
...
...
@@ -535,7 +534,7 @@ Save these changes and start a new Python interactive shell by running
# Display any choices from the related object set -- none so far.
>>> q.choice_set.all()
[]
<QuerySet []>
# Create three choices.
>>> q.choice_set.create(choice_text='Not much', votes=0)
...
...
@@ -550,7 +549,7 @@ Save these changes and start a new Python interactive shell by running
# And vice versa: Question objects get access to Choice objects.
>>> q.choice_set.all()
[<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
3
...
...
@@ -560,7 +559,7 @@ Save these changes and start a new Python interactive shell by running
# Find all Choices for any question whose pub_date is in this year
# (reusing the 'current_year' variable we created above).
>>> Choice.objects.filter(question__pub_date__year=current_year)
[<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
# Let's delete one of the choices. Use delete() for that.
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
...
...
docs/intro/tutorial05.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -383,7 +383,7 @@ With that ready, we can ask the client to do some work for us::
>>> # If the following doesn't work, you probably omitted the call to
>>> # setup_test_environment() described above
>>> response.context['latest_question_list']
[<Question: Who is your favorite Beatle?>]
<QuerySet [<Question: Who is your favorite Beatle?>]>
Improving our view
------------------
...
...
docs/ref/contrib/contenttypes.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -382,7 +382,7 @@ be used to retrieve their associated ``TaggedItems``::
>>> t2 = TaggedItem(content_object=b, tag='python')
>>> t2.save()
>>> b.tags.all()
[<TaggedItem: django>, <TaggedItem: python>]
<QuerySet [<TaggedItem: django>, <TaggedItem: python>]>
Defining :class:`~django.contrib.contenttypes.fields.GenericRelation` with
``related_query_name`` set allows querying from the related object::
...
...
@@ -394,7 +394,7 @@ from ``TaggedItem``::
>>> # Get all tags belonging to books containing `django` in the url
>>> TaggedItem.objects.filter(bookmarks__url__contains='django')
[<TaggedItem: django>, <TaggedItem: python>]
<QuerySet [<TaggedItem: django>, <TaggedItem: python>]>
Just as :class:`~django.contrib.contenttypes.fields.GenericForeignKey`
accepts the names of the content-type and object-ID fields as
...
...
@@ -418,7 +418,7 @@ same types of lookups manually::
>>> bookmark_type = ContentType.objects.get_for_model(b)
>>> TaggedItem.objects.filter(content_type__pk=bookmark_type.id,
... object_id=b.id)
[<TaggedItem: django>, <TaggedItem: python>]
<QuerySet [<TaggedItem: django>, <TaggedItem: python>]>
Note that if the model in a
:class:`~django.contrib.contenttypes.fields.GenericRelation` uses a
...
...
docs/ref/contrib/gis/tutorial.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -588,9 +588,8 @@ Consortium (OGC). [#]_ Import the ``WorldBorder`` model, and perform
a ``contains`` lookup using the ``pnt_wkt`` as the parameter::
>>> from world.models import WorldBorder
>>> qs = WorldBorder.objects.filter(mpoly__contains=pnt_wkt)
>>> qs
[<WorldBorder: United States>]
>>> WorldBorder.objects.filter(mpoly__contains=pnt_wkt)
<QuerySet [<WorldBorder: United States>]>
Here, you retrieved a ``QuerySet`` with only one model: the border of the
United States (exactly what you would expect).
...
...
@@ -602,8 +601,7 @@ of a queryset::
>>> from django.contrib.gis.geos import Point
>>> pnt = Point(12.4604, 43.9420)
>>> sm = WorldBorder.objects.get(mpoly__intersects=pnt)
>>> sm
>>> WorldBorder.objects.get(mpoly__intersects=pnt)
<WorldBorder: San Marino>
The ``contains`` and ``intersects`` lookups are just a subset of the
...
...
@@ -638,7 +636,7 @@ of abstraction::
"world_worldborder"."mpoly" FROM "world_worldborder"
WHERE ST_Intersects("world_worldborder"."mpoly", ST_Transform(%s, 4326))
>>> qs # printing evaluates the queryset
[<WorldBorder: United States>]
<QuerySet [<WorldBorder: United States>]>
__ http://spatialreference.org/ref/epsg/32140/
...
...
docs/ref/contrib/postgres/fields.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -120,13 +120,13 @@ data. It uses the SQL operator ``@>``. For example::
>>> Post.objects.create(name='Third post', tags=['tutorial', 'django'])
>>> Post.objects.filter(tags__contains=['thoughts'])
[<Post: First post>, <Post: Second post>]
<QuerySet [<Post: First post>, <Post: Second post>]>
>>> Post.objects.filter(tags__contains=['django'])
[<Post: First post>, <Post: Third post>]
<QuerySet [<Post: First post>, <Post: Third post>]>
>>> Post.objects.filter(tags__contains=['django', 'thoughts'])
[<Post: First post>]
<QuerySet [<Post: First post>]>
.. fieldlookup:: arrayfield.contained_by
...
...
@@ -142,10 +142,10 @@ passed. It uses the SQL operator ``<@``. For example::
>>> Post.objects.create(name='Third post', tags=['tutorial', 'django'])
>>> Post.objects.filter(tags__contained_by=['thoughts', 'django'])
[<Post: First post>, <Post: Second post>]
<QuerySet [<Post: First post>, <Post: Second post>]>
>>> Post.objects.filter(tags__contained_by=['thoughts', 'django', 'tutorial'])
[<Post: First post>, <Post: Second post>, <Post: Third post>]
<QuerySet [<Post: First post>, <Post: Second post>, <Post: Third post>]>
.. fieldlookup:: arrayfield.overlap
...
...
@@ -160,10 +160,10 @@ the SQL operator ``&&``. For example::
>>> Post.objects.create(name='Third post', tags=['tutorial', 'django'])
>>> Post.objects.filter(tags__overlap=['thoughts'])
[<Post: First post>, <Post: Second post>]
<QuerySet [<Post: First post>, <Post: Second post>]>
>>> Post.objects.filter(tags__overlap=['thoughts', 'tutorial'])
[<Post: First post>, <Post: Second post>, <Post: Third post>]
<QuerySet [<Post: First post>, <Post: Second post>, <Post: Third post>]>
.. fieldlookup:: arrayfield.len
...
...
@@ -177,7 +177,7 @@ available for :class:`~django.db.models.IntegerField`. For example::
>>> Post.objects.create(name='Second post', tags=['thoughts'])
>>> Post.objects.filter(tags__len=1)
[<Post: Second post>]
<QuerySet [<Post: Second post>]>
.. fieldlookup:: arrayfield.index
...
...
@@ -194,13 +194,13 @@ example::
>>> Post.objects.create(name='Second post', tags=['thoughts'])
>>> Post.objects.filter(tags__0='thoughts')
[<Post: First post>, <Post: Second post>]
<QuerySet [<Post: First post>, <Post: Second post>]>
>>> Post.objects.filter(tags__1__iexact='Django')
[<Post: First post>]
<QuerySet [<Post: First post>]>
>>> Post.objects.filter(tags__276='javascript')
[]
<QuerySet []>
.. note::
...
...
@@ -222,10 +222,10 @@ lookups available after the transform do not change. For example::
>>> Post.objects.create(name='Third post', tags=['django', 'python', 'thoughts'])
>>> Post.objects.filter(tags__0_1=['thoughts'])
[<Post: First post>]
<QuerySet [<Post: First post>]>
>>> Post.objects.filter(tags__0_2__contains='thoughts')
[<Post: First post>, <Post: Second post>]
<QuerySet [<Post: First post>, <Post: Second post>]>
.. note::
...
...
@@ -320,12 +320,12 @@ To query based on a given key, you simply use that key as the lookup name::
>>> Dog.objects.create(name='Meg', data={'breed': 'collie'})
>>> Dog.objects.filter(data__breed='collie')
[<Dog: Meg>]
<QuerySet [<Dog: Meg>]>
You can chain other lookups after key lookups::
>>> Dog.objects.filter(data__breed__contains='l')
[<Dog: Rufus>, <Dog: Meg>]
<QuerySet [<Dog: Rufus>, <Dog: Meg>]>
If the key you wish to query by clashes with the name of another lookup, you
need to use the :lookup:`hstorefield.contains` lookup instead.
...
...
@@ -352,10 +352,10 @@ field. It uses the SQL operator ``@>``. For example::
>>> Dog.objects.create(name='Fred', data={})
>>> Dog.objects.filter(data__contains={'owner': 'Bob'})
[<Dog: Rufus>, <Dog: Meg>]
<QuerySet [<Dog: Rufus>, <Dog: Meg>]>
>>> Dog.objects.filter(data__contains={'breed': 'collie'})
[<Dog: Meg>]
<QuerySet [<Dog: Meg>]>
.. fieldlookup:: hstorefield.contained_by
...
...
@@ -372,10 +372,10 @@ example::
>>> Dog.objects.create(name='Fred', data={})
>>> Dog.objects.filter(data__contained_by={'breed': 'collie', 'owner': 'Bob'})
[<Dog: Meg>, <Dog: Fred>]
<QuerySet [<Dog: Meg>, <Dog: Fred>]>
>>> Dog.objects.filter(data__contained_by={'breed': 'collie'})
[<Dog: Fred>]
<QuerySet [<Dog: Fred>]>
.. fieldlookup:: hstorefield.has_key
...
...
@@ -389,7 +389,7 @@ Returns objects where the given key is in the data. Uses the SQL operator
>>> Dog.objects.create(name='Meg', data={'breed': 'collie', 'owner': 'Bob'})
>>> Dog.objects.filter(data__has_key='owner')
[<Dog: Meg>]
<QuerySet [<Dog: Meg>]>
.. fieldlookup:: hstorefield.has_any_keys
...
...
@@ -406,7 +406,7 @@ operator ``?|``. For example::
>>> Dog.objects.create(name='Fred', data={})
>>> Dog.objects.filter(data__has_any_keys=['owner', 'breed'])
[<Dog: Rufus>, <Dog: Meg>]
<QuerySet [<Dog: Rufus>, <Dog: Meg>]>
.. fieldlookup:: hstorefield.has_keys
...
...
@@ -420,7 +420,7 @@ Returns objects where all of the given keys are in the data. Uses the SQL operat
>>> Dog.objects.create(name='Meg', data={'breed': 'collie', 'owner': 'Bob'})
>>> Dog.objects.filter(data__has_keys=['breed', 'owner'])
[<Dog: Meg>]
<QuerySet [<Dog: Meg>]>
.. fieldlookup:: hstorefield.keys
...
...
@@ -437,7 +437,7 @@ in conjunction with lookups on
>>> Dog.objects.create(name='Meg', data={'breed': 'collie', 'owner': 'Bob'})
>>> Dog.objects.filter(data__keys__overlap=['breed', 'toy'])
[<Dog: Rufus>, <Dog: Meg>]
<QuerySet [<Dog: Rufus>, <Dog: Meg>]>
.. fieldlookup:: hstorefield.values
...
...
@@ -454,7 +454,7 @@ using in conjunction with lookups on
>>> Dog.objects.create(name='Meg', data={'breed': 'collie', 'owner': 'Bob'})
>>> Dog.objects.filter(data__values__contains=['collie'])
[<Dog: Meg>]
<QuerySet [<Dog: Meg>]>
JSONField
---------
...
...
@@ -521,18 +521,18 @@ name::
>>> Dog.objects.create(name='Meg', data={'breed': 'collie'})
>>> Dog.objects.filter(data__breed='collie')
[<Dog: Meg>]
<QuerySet [<Dog: Meg>]>
Multiple keys can be chained together to form a path lookup::
>>> Dog.objects.filter(data__owner__name='Bob')
[<Dog: Rufus>]
<QuerySet [<QuerySet <Dog: Rufus>]>
If the key is an integer, it will be interpreted as an index lookup in an
array::
>>> Dog.objects.filter(data__owner__other_pets__0__name='Fishy')
[<Dog: Rufus>]
<QuerySet [<Dog: Rufus>]>
If the key you wish to query by clashes with the name of another lookup, use
the :lookup:`jsonfield.contains` lookup instead.
...
...
@@ -673,7 +673,7 @@ contains
''''''''
>>> Event.objects.filter(ages__contains=NumericRange(4, 5))
[<Event: Soft play>]
<QuerySet [<Event: Soft play>]>
.. fieldlookup:: rangefield.contained_by
...
...
@@ -681,7 +681,7 @@ contained_by
''''''''''''
>>> Event.objects.filter(ages__contained_by=NumericRange(0, 15))
[<Event: Soft play>]
<QuerySet [<Event: Soft play>]>
.. versionadded 1.9
...
...
@@ -697,7 +697,7 @@ contained_by
... timezone.now() - datetime.timedelta(hours=1),
... timezone.now() + datetime.timedelta(hours=1),
... )
[<Event: Soft play>]
<QuerySet [<Event: Soft play>]>
.. fieldlookup:: rangefield.overlap
...
...
@@ -705,7 +705,7 @@ overlap
'''''''
>>> Event.objects.filter(ages__overlap=NumericRange(8, 12))
[<Event: Soft play>]
<QuerySet [<Event: Soft play>]>
Comparison functions
~~~~~~~~~~~~~~~~~~~~
...
...
@@ -726,7 +726,7 @@ all the points in the returned range are less than all those in the passed
range.
>>> Event.objects.filter(ages__fully_lt=NumericRange(11, 15))
[<Event: Soft play>]
<QuerySet [<Event: Soft play>]>
.. fieldlookup:: rangefield.fully_gt
...
...
@@ -738,7 +738,7 @@ the all the points in the returned range are greater than all those in the
passed range.
>>> Event.objects.filter(ages__fully_gt=NumericRange(11, 15))
[<Event: Pub trip>]
<QuerySet [<Event: Pub trip>]>
.. fieldlookup:: rangefield.not_lt
...
...
@@ -750,7 +750,7 @@ is the lower bound of the returned range is at least the lower bound of the
passed range.
>>> Event.objects.filter(ages__not_lt=NumericRange(0, 15))
[<Event: Soft play>, <Event: Pub trip>]
<QuerySet [<Event: Soft play>, <Event: Pub trip>]>
.. fieldlookup:: rangefield.not_gt
...
...
@@ -762,7 +762,7 @@ is the upper bound of the returned range is at most the upper bound of the
passed range.
>>> Event.objects.filter(ages__not_gt=NumericRange(3, 10))
[<Event: Soft play>]
<QuerySet [<Event: Soft play>]>
.. fieldlookup:: rangefield.adjacent_to
...
...
@@ -772,7 +772,7 @@ adjacent_to
The returned ranges share a bound with the passed range.
>>> Event.objects.filter(ages__adjacent_to=NumericRange(10, 21))
[<Event: Soft play>, <Event: Pub trip>]
<QuerySet [<Event: Soft play>, <Event: Pub trip>]>
Querying using the bounds
~~~~~~~~~~~~~~~~~~~~~~~~~
...
...
@@ -789,7 +789,7 @@ Returned objects have the given lower bound. Can be chained to valid lookups
for the base field.
>>> Event.objects.filter(ages__startswith=21)
[<Event: Pub trip>]
<QuerySet [<Event: Pub trip>]>
.. fieldlookup:: rangefield.endswith
...
...
@@ -800,7 +800,7 @@ Returned objects have the given upper bound. Can be chained to valid lookups
for the base field.
>>> Event.objects.filter(ages__endswith=10)
[<Event: Soft play>]
<QuerySet [<Event: Soft play>]>
.. fieldlookup:: rangefield.isempty
...
...
@@ -811,7 +811,7 @@ Returned objects are empty ranges. Can be chained to valid lookups for a
:class:`~django.db.models.BooleanField`.
>>> Event.objects.filter(ages__isempty=True)
[]
<QuerySet []>
Defining your own range types
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
...
docs/ref/contrib/postgres/functions.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -28,4 +28,4 @@ Usage example::
>>> from django.contrib.postgres.functions import TransactionNow
>>> Article.objects.filter(published__lte=TransactionNow())
[<Article: How to Django>]
<QuerySet [<Article: How to Django>]>
docs/ref/models/database-functions.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -226,7 +226,7 @@ Usage example::
>>> from django.db.models.functions import Now
>>> Article.objects.filter(published__lte=Now())
[<Article: How to Django>]
<QuerySet [<Article: How to Django>]>
.. admonition:: PostgreSQL considerations
...
...
docs/ref/models/querysets.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -513,11 +513,11 @@ objects::
# This list contains a Blog object.
>>> Blog.objects.filter(name__startswith='Beatles')
[<Blog: Beatles Blog>]
<QuerySet [<Blog: Beatles Blog>]>
# This list contains a dictionary.
>>> Blog.objects.filter(name__startswith='Beatles').values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>
The ``values()`` method takes optional positional arguments, ``*fields``, which
specify field names to which the ``SELECT`` should be limited. If you specify
...
...
@@ -528,9 +528,9 @@ contain a key and value for every field in the database table.
Example::
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
<QuerySet [{'id': 1, 'name': 'Beatles Blog'}]>
A few subtleties that are worth mentioning:
...
...
@@ -546,13 +546,13 @@ A few subtleties that are worth mentioning:
For example::
>>> Entry.objects.values()
[{'blog_id': 1, 'headline': 'First Entry', ...}, ...]
<QuerySet [{'blog_id': 1, 'headline': 'First Entry', ...}, ...]>
>>> Entry.objects.values('blog')
[{'blog': 1}, ...]
<QuerySet [{'blog': 1}, ...]>
>>> Entry.objects.values('blog_id')
[{'blog_id': 1}, ...]
<QuerySet [{'blog_id': 1}, ...]>
* When using ``values()`` together with :meth:`distinct()`, be aware that
ordering can affect the results. See the note in :meth:`distinct` for
...
...
@@ -585,9 +585,9 @@ individualism.
You can also refer to fields on related models with reverse relations through
``OneToOneField``, ``ForeignKey`` and ``ManyToManyField`` attributes::
Blog.objects.values('name', 'entry__headline')
[{'name': 'My blog', 'entry__headline': 'An entry'},
{'name': 'My blog', 'entry__headline': 'Another entry'}, ...]
>>>
Blog.objects.values('name', 'entry__headline')
<QuerySet
[{'name': 'My blog', 'entry__headline': 'An entry'},
{'name': 'My blog', 'entry__headline': 'Another entry'}, ...]
>
.. warning::
...
...
@@ -717,7 +717,7 @@ is an instance of ``EmptyQuerySet``.
Examples::
>>> Entry.objects.none()
[]
<QuerySet []>
>>> from django.db.models.query import EmptyQuerySet
>>> isinstance(Entry.objects.none(), EmptyQuerySet)
True
...
...
@@ -3015,11 +3015,11 @@ as the string based lookups passed to
:meth:`~django.db.models.query.QuerySet.prefetch_related()`. For example:
>>> Question.objects.prefetch_related(Prefetch('choice_set')).get().choice_set.all()
[<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
# This will only execute two queries regardless of the number of Question
# and Choice objects.
>>> Question.objects.prefetch_related(Prefetch('choice_set')).all()
[<Question: Question object>]
<QuerySet [<Question: Question object>]>
The ``queryset`` argument supplies a base ``QuerySet`` for the given lookup.
This is useful to further filter down the prefetch operation, or to call
...
...
@@ -3028,19 +3028,19 @@ relation, hence reducing the number of queries even further:
>>> voted_choices = Choice.objects.filter(votes__gt=0)
>>> voted_choices
[<Choice: The sky>]
<QuerySet [<Choice: The sky>]>
>>> prefetch = Prefetch('choice_set', queryset=voted_choices)
>>> Question.objects.prefetch_related(prefetch).get().choice_set.all()
[<Choice: The sky>]
<QuerySet [<Choice: The sky>]>
The ``to_attr`` argument sets the result of the prefetch operation to a custom
attribute:
>>> prefetch = Prefetch('choice_set', queryset=voted_choices, to_attr='voted_choices')
>>> Question.objects.prefetch_related(prefetch).get().voted_choices
[<Choice: The sky>]
<QuerySet [<Choice: The sky>]>
>>> Question.objects.prefetch_related(prefetch).get().choice_set.all()
[<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
.. note::
...
...
docs/releases/1.10.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -219,7 +219,8 @@ Database backend API
Miscellaneous
~~~~~~~~~~~~~
* ...
* The ``repr()`` of a ``QuerySet`` is wrapped in ```<QuerySet >`` to
disambiguate it from a plain list when debugging.
.. _deprecated-features-1.10:
...
...
docs/topics/db/aggregation.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -79,7 +79,7 @@ In a hurry? Here's how to do common aggregate queries, assuming the models above
>>> from django.db.models import Count
>>> pubs = Publisher.objects.annotate(num_books=Count('book'))
>>> pubs
[<Publisher BaloneyPress>, <Publisher SalamiPress>, ...]
<QuerySet [<Publisher: BaloneyPress>, <Publisher: SalamiPress>, ...]>
>>> pubs[0].num_books
73
...
...
docs/topics/db/examples/many_to_many.txt
Dosyayı görüntüle @
e0837f2c
This diff is collapsed.
Click to expand it.
docs/topics/db/examples/many_to_one.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -90,7 +90,7 @@ Create a new article, and add it to the article set::
>>> new_article2.reporter.id
1
>>> r.article_set.all()
[<Article: John's second story>, <Article: Paul's story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: Paul's story>, <Article: This is a test>]>
Add the same article to a different article set - check that it moves::
...
...
@@ -108,9 +108,9 @@ Adding an object of the wrong type raises TypeError::
TypeError: 'Article' instance expected
>>> r.article_set.all()
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
>>> r2.article_set.all()
[<Article: Paul's story>]
<QuerySet [<Article: Paul's story>]>
>>> r.article_set.count()
2
...
...
@@ -126,56 +126,56 @@ Use double underscores to separate relationships.
This works as many levels deep as you want. There's no limit. For example::
>>> r.article_set.filter(headline__startswith='This')
[<Article: This is a test>]
<QuerySet [<Article: This is a test>]>
# Find all Articles for any Reporter whose first name is "John".
>>> Article.objects.filter(reporter__first_name='John')
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
Exact match is implied here::
>>> Article.objects.filter(reporter__first_name='John')
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
Query twice over the related field. This translates to an AND condition in the
WHERE clause::
>>> Article.objects.filter(reporter__first_name='John', reporter__last_name='Smith')
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
For the related lookup you can supply a primary key value or pass the related
object explicitly::
>>> Article.objects.filter(reporter__pk=1)
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
>>> Article.objects.filter(reporter=1)
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
>>> Article.objects.filter(reporter=r)
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
>>> Article.objects.filter(reporter__in=[1,2]).distinct()
[<Article: John's second story>, <Article: Paul's story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: Paul's story>, <Article: This is a test>]>
>>> Article.objects.filter(reporter__in=[r,r2]).distinct()
[<Article: John's second story>, <Article: Paul's story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: Paul's story>, <Article: This is a test>]>
You can also use a queryset instead of a literal list of instances::
>>> Article.objects.filter(reporter__in=Reporter.objects.filter(first_name='John')).distinct()
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
Querying in the opposite direction::
>>> Reporter.objects.filter(article__pk=1)
[<Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>]>
>>> Reporter.objects.filter(article=1)
[<Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>]>
>>> Reporter.objects.filter(article=a)
[<Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>]>
>>> Reporter.objects.filter(article__headline__startswith='This')
[<Reporter: John Smith>, <Reporter: John Smith>, <Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>, <Reporter: John Smith>, <Reporter: John Smith>]>
>>> Reporter.objects.filter(article__headline__startswith='This').distinct()
[<Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>]>
Counting in the opposite direction works in conjunction with distinct()::
...
...
@@ -187,30 +187,30 @@ Counting in the opposite direction works in conjunction with distinct()::
Queries can go round in circles::
>>> Reporter.objects.filter(article__reporter__first_name__startswith='John')
[<Reporter: John Smith>, <Reporter: John Smith>, <Reporter: John Smith>, <Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>, <Reporter: John Smith>, <Reporter: John Smith>, <Reporter: John Smith>]>
>>> Reporter.objects.filter(article__reporter__first_name__startswith='John').distinct()
[<Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>]>
>>> Reporter.objects.filter(article__reporter=r).distinct()
[<Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>]>
If you delete a reporter, his articles will be deleted (assuming that the
ForeignKey was defined with :attr:`django.db.models.ForeignKey.on_delete` set to
``CASCADE``, which is the default)::
>>> Article.objects.all()
[<Article: John's second story>, <Article: Paul's story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: Paul's story>, <Article: This is a test>]>
>>> Reporter.objects.order_by('first_name')
[<Reporter: John Smith>, <Reporter: Paul Jones>]
<QuerySet [<Reporter: John Smith>, <Reporter: Paul Jones>]>
>>> r2.delete()
>>> Article.objects.all()
[<Article: John's second story>, <Article: This is a test>]
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
>>> Reporter.objects.order_by('first_name')
[<Reporter: John Smith>]
<QuerySet [<Reporter: John Smith>]>
You can delete using a JOIN in the query::
>>> Reporter.objects.filter(article__headline__startswith='This').delete()
>>> Reporter.objects.all()
[]
<QuerySet []>
>>> Article.objects.all()
[]
<QuerySet []>
docs/topics/db/examples/one_to_one.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -106,13 +106,13 @@ that there are two restaurants - Ace Hardware the Restaurant was created in the
call to r.place = p2::
>>> Restaurant.objects.all()
[<Restaurant: Demon Dogs the restaurant>, <Restaurant: Ace Hardware the restaurant>]
<QuerySet [<Restaurant: Demon Dogs the restaurant>, <Restaurant: Ace Hardware the restaurant>]>
Place.objects.all() returns all Places, regardless of whether they have
Restaurants::
>>> Place.objects.order_by('name')
[<Place: Ace Hardware the place>, <Place: Demon Dogs the place>]
<QuerySet [<Place: Ace Hardware the place>, <Place: Demon Dogs the place>]>
You can query the models using :ref:`lookups across relationships <lookups-that-span-relationships>`::
...
...
@@ -121,9 +121,9 @@ You can query the models using :ref:`lookups across relationships <lookups-that-
>>> Restaurant.objects.get(place__pk=1)
<Restaurant: Demon Dogs the restaurant>
>>> Restaurant.objects.filter(place__name__startswith="Demon")
[<Restaurant: Demon Dogs the restaurant>]
<QuerySet [<Restaurant: Demon Dogs the restaurant>]>
>>> Restaurant.objects.exclude(place__address__contains="Ashland")
[<Restaurant: Demon Dogs the restaurant>]
<QuerySet [<Restaurant: Demon Dogs the restaurant>]>
This of course works in reverse::
...
...
@@ -146,6 +146,6 @@ Add a Waiter to the Restaurant::
Query the waiters::
>>> Waiter.objects.filter(restaurant__place=p1)
[<Waiter: Joe the waiter at Demon Dogs the restaurant>]
<QuerySet [<Waiter: Joe the waiter at Demon Dogs the restaurant>]>
>>> Waiter.objects.filter(restaurant__place__name__startswith="Demon")
[<Waiter: Joe the waiter at Demon Dogs the restaurant>]
<QuerySet [<Waiter: Joe the waiter at Demon Dogs the restaurant>]>
docs/topics/db/models.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -501,14 +501,14 @@ the intermediate model::
... invite_reason="Needed a new drummer.")
>>> m1.save()
>>> beatles.members.all()
[<Person: Ringo Starr>]
<QuerySet [<Person: Ringo Starr>]>
>>> ringo.group_set.all()
[<Group: The Beatles>]
<QuerySet [<Group: The Beatles>]>
>>> m2 = Membership.objects.create(person=paul, group=beatles,
... date_joined=date(1960, 8, 1),
... invite_reason="Wanted to form a band.")
>>> beatles.members.all()
[<Person: Ringo Starr>, <Person: Paul McCartney>]
<QuerySet [<Person: Ringo Starr>, <Person: Paul McCartney>]>
Unlike normal many-to-many fields, you *can't* use ``add``, ``create``,
or assignment (i.e., ``beatles.members = [...]``) to create relationships::
...
...
@@ -537,7 +537,7 @@ used to remove all many-to-many relationships for an instance::
>>> beatles.members.clear()
>>> # Note that this deletes the intermediate model instances
>>> Membership.objects.all()
[]
<QuerySet []>
Once you have established the many-to-many relationships by creating instances
of your intermediate model, you can issue queries. Just as with normal
...
...
@@ -546,7 +546,7 @@ many-to-many-related model::
# Find all the groups with a member whose name starts with 'Paul'
>>> Group.objects.filter(members__name__startswith='Paul')
[<Group: The Beatles>]
<QuerySet [<Group: The Beatles>]>
As you are using an intermediate model, you can also query on its attributes::
...
...
@@ -554,7 +554,7 @@ As you are using an intermediate model, you can also query on its attributes::
>>> Person.objects.filter(
... group__name='The Beatles',
... membership__date_joined__gt=date(1961,1,1))
[<Person: Ringo Starr]
<QuerySet [<Person: Ringo Starr]>
If you need to access a membership's information you may do so by directly
querying the ``Membership`` model::
...
...
docs/topics/forms/modelforms.txt
Dosyayı görüntüle @
e0837f2c
...
...
@@ -912,7 +912,7 @@ extra forms displayed.
``max_num`` does not prevent existing objects from being displayed::
>>> Author.objects.order_by('name')
[<Author: Charles Baudelaire>, <Author: Paul Verlaine>, <Author: Walt Whitman>]
<QuerySet [<Author: Charles Baudelaire>, <Author: Paul Verlaine>, <Author: Walt Whitman>]>
>>> AuthorFormSet = modelformset_factory(Author, fields=('name',), max_num=1)
>>> formset = AuthorFormSet(queryset=Author.objects.order_by('name'))
...
...
tests/fixtures_regress/tests.py
Dosyayı görüntüle @
e0837f2c
...
...
@@ -800,11 +800,12 @@ class NaturalKeyFixtureTests(TestCase):
verbosity
=
0
,
)
books
=
Book
.
objects
.
all
()
self
.
assertEqual
(
books
.
__repr__
(),
"[<Book: Cryptonomicon by Neal Stephenson (available at Amazon, Borders)>, "
"<Book: Ender's Game by Orson Scott Card (available at Collins Bookstore)>, "
"<Book: Permutation City by Greg Egan (available at Angus and Robertson)>]"
self
.
assertQuerysetEqual
(
books
,
[
"<Book: Cryptonomicon by Neal Stephenson (available at Amazon, Borders)>"
,
"<Book: Ender's Game by Orson Scott Card (available at Collins Bookstore)>"
,
"<Book: Permutation City by Greg Egan (available at Angus and Robertson)>"
,
]
)
...
...
tests/null_queries/tests.py
Dosyayı görüntüle @
e0837f2c
...
...
@@ -47,7 +47,7 @@ class NullQueriesTests(TestCase):
# Related managers use __exact=None implicitly if the object hasn't been saved.
p2
=
Poll
(
question
=
"How?"
)
self
.
assertEqual
(
repr
(
p2
.
choice_set
.
all
()),
'
[]
'
)
self
.
assertEqual
(
repr
(
p2
.
choice_set
.
all
()),
'
<QuerySet []>
'
)
def
test_reverse_relations
(
self
):
"""
...
...
tests/string_lookup/tests.py
Dosyayı görüntüle @
e0837f2c
...
...
@@ -78,7 +78,9 @@ class StringLookupTests(TestCase):
"""
a
=
Article
(
name
=
'IP test'
,
text
=
'The body'
,
submitted_from
=
'192.0.2.100'
)
a
.
save
()
self
.
assertEqual
(
repr
(
Article
.
objects
.
filter
(
submitted_from__contains
=
'192.0.2'
)),
repr
([
a
]))
self
.
assertQuerysetEqual
(
Article
.
objects
.
filter
(
submitted_from__contains
=
'192.0.2'
),
[
a
],
lambda
x
:
x
)
# Test that the searches do not match the subnet mask (/32 in this case)
self
.
assertEqual
(
Article
.
objects
.
filter
(
submitted_from__contains
=
'32'
)
.
count
(),
0
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment