Fixed #163 -- Added 'pk' database API option, which is a shorthand for (primary_key)__exact

git-svn-id: http://code.djangoproject.com/svn/django/trunk@316 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2005-07-26 16:11:43 +00:00
parent f14c98e44c
commit 786c750c40
14 changed files with 68 additions and 42 deletions

View file

@ -49,10 +49,10 @@ settings. Let's look at what ``startproject`` created::
First, edit ``myproject/settings/main.py``. It's a normal Python module with
module-level variables representing Django settings. Edit the file and change
these settings to match your database's connection parameters:
* ``DATABASE_ENGINE`` -- Either 'postgresql', 'mysql' or 'sqlite3'.
* ``DATABASE_ENGINE`` -- Either 'postgresql', 'mysql' or 'sqlite3'.
More coming soon.
* ``DATABASE_NAME`` -- The name of your database, or the full path to
* ``DATABASE_NAME`` -- The name of your database, or the full path to
the database file if using sqlite.
* ``DATABASE_USER`` -- Your database username (not used for sqlite).
* ``DATABASE_PASSWORD`` -- Your database password (not used for sqlite).
@ -134,7 +134,7 @@ The first step in writing a database Web app in Django is to define your models
-- essentially, your database layout, with additional metadata.
.. admonition:: Philosophy
A model is the single, definitive source of data about your
data. It contains the essential fields and behaviors of the data you're
storing. Django follows the `DRY Principle`_. The goal is to define your
@ -243,11 +243,11 @@ Note the following:
* Table names are automatically generated by combining the name of the app
(polls) with a plural version of the object name (polls and choices). (You
can override this behavior.)
* Primary keys (IDs) are added automatically. (You can override this, too.)
* The foreign key relationship is made explicit by a ``REFERENCES`` statement.
* It's tailored to the database you're using, so database-specific field types
such as ``auto_increment`` (MySQL), ``serial`` (PostgreSQL), or ``integer
primary key`` (SQLite) are handled for you automatically. The author of
@ -256,16 +256,16 @@ Note the following:
If you're interested, also run the following commands:
* ``django-admin.py sqlinitialdata polls`` -- Outputs the initial-data
* ``django-admin.py sqlinitialdata polls`` -- Outputs the initial-data
inserts required for Django's admin framework.
* ``django-admin.py sqlclear polls`` -- Outputs the necessary ``DROP
* ``django-admin.py sqlclear polls`` -- Outputs the necessary ``DROP
TABLE`` statements for this app, according to which tables already exist
in your database (if any).
* ``django-admin.py sqlindexes polls`` -- Outputs the ``CREATE INDEX``
statements for this app.
* ``django-admin.py sqlall polls`` -- A combination of 'sql' and
'sqlinitialdata'.
@ -372,14 +372,20 @@ Let's jump back into the Python interactive shell::
>>> polls.get_list(question__startswith='What')
[What's up]
# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to polls.get_object(id__exact=1).
>>> polls.get_object(pk=1)
What's up
# Make sure our custom method worked.
>>> p = polls.get_object(id__exact=1)
>>> p = polls.get_object(pk=1)
>>> p.was_published_today()
False
# Give the Poll a couple of Choices. Each one of these method calls does an
# INSERT statement behind the scenes and returns the new Choice object.
>>> p = polls.get_object(id__exact=1)
>>> p = polls.get_object(pk=1)
>>> p.add_choice(choice='Not much', votes=0)
Not much
>>> p.add_choice(choice='The sky', votes=0)