~ubuntu-branches/ubuntu/quantal/python-django/quantal

« back to all changes in this revision

Viewing changes to docs/model-api.txt

  • Committer: Bazaar Package Importer
  • Author(s): Scott James Remnant, Eddy Mulyono
  • Date: 2008-09-16 12:18:47 UTC
  • mfrom: (1.1.5 upstream) (4.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080916121847-mg225rg5mnsdqzr0
Tags: 1.0-1ubuntu1
* Merge from Debian (LP: #264191), remaining changes:
  - Run test suite on build.

[Eddy Mulyono]
* Update patch to workaround network test case failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
===============
2
 
Model reference
3
 
===============
4
 
 
5
 
A model is the single, definitive source of data about your data. It contains
6
 
the essential fields and behaviors of the data you're storing. Generally, each
7
 
model maps to a single database table.
8
 
 
9
 
The basics:
10
 
 
11
 
    * Each model is a Python class that subclasses ``django.db.models.Model``.
12
 
    * Each attribute of the model represents a database field.
13
 
    * Model metadata (non-field information) goes in an inner class named
14
 
      ``Meta``.
15
 
    * Metadata used for Django's admin site goes into an inner class named
16
 
      ``Admin``.
17
 
    * With all of this, Django gives you an automatically-generated
18
 
      database-access API, which is explained in the `Database API reference`_.
19
 
 
20
 
A companion to this document is the `official repository of model examples`_.
21
 
(In the Django source distribution, these examples are in the
22
 
``tests/modeltests`` directory.)
23
 
 
24
 
.. _Database API reference: http://www.djangoproject.com/documentation/db_api/
25
 
.. _official repository of model examples: http://www.djangoproject.com/documentation/models/
26
 
 
27
 
Quick example
28
 
=============
29
 
 
30
 
This example model defines a ``Person``, which has a ``first_name`` and
31
 
``last_name``::
32
 
 
33
 
    from django.db import models
34
 
 
35
 
    class Person(models.Model):
36
 
        first_name = models.CharField(maxlength=30)
37
 
        last_name = models.CharField(maxlength=30)
38
 
 
39
 
``first_name`` and ``last_name`` are *fields* of the model. Each field is
40
 
specified as a class attribute, and each attribute maps to a database column.
41
 
 
42
 
The above ``Person`` model would create a database table like this::
43
 
 
44
 
    CREATE TABLE myapp_person (
45
 
        "id" serial NOT NULL PRIMARY KEY,
46
 
        "first_name" varchar(30) NOT NULL,
47
 
        "last_name" varchar(30) NOT NULL
48
 
    );
49
 
 
50
 
Some technical notes:
51
 
 
52
 
    * The name of the table, ``myapp_person``, is automatically derived from
53
 
      some model metadata but can be overridden. See _`Table names` below.
54
 
    * An ``id`` field is added automatically, but this behavior can be
55
 
      overriden. See `Automatic primary key fields`_ below.
56
 
    * The ``CREATE TABLE`` SQL in this example is formatted using PostgreSQL
57
 
      syntax, but it's worth noting Django uses SQL tailored to the database
58
 
      backend specified in your `settings file`_.
59
 
 
60
 
.. _settings file: http://www.djangoproject.com/documentation/settings/
61
 
 
62
 
Fields
63
 
======
64
 
 
65
 
The most important part of a model -- and the only required part of a model --
66
 
is the list of database fields it defines. Fields are specified by class
67
 
attributes.
68
 
 
69
 
Example::
70
 
 
71
 
    class Musician(models.Model):
72
 
        first_name = models.CharField(maxlength=50)
73
 
        last_name = models.CharField(maxlength=50)
74
 
        instrument = models.CharField(maxlength=100)
75
 
 
76
 
    class Album(models.Model):
77
 
        artist = models.ForeignKey(Musician)
78
 
        name = models.CharField(maxlength=100)
79
 
        release_date = models.DateField()
80
 
        num_stars = models.IntegerField()
81
 
 
82
 
Field name restrictions
83
 
-----------------------
84
 
 
85
 
Django places only two restrictions on model field names:
86
 
 
87
 
    1. A field name cannot be a Python reserved word, because that would result
88
 
       in a Python syntax error. For example::
89
 
 
90
 
           class Example(models.Model):
91
 
               pass = models.IntegerField() # 'pass' is a reserved word!
92
 
 
93
 
    2. A field name cannot contain more than one underscore in a row, due to
94
 
       the way Django's query lookup syntax works. For example::
95
 
 
96
 
           class Example(models.Model):
97
 
               foo__bar = models.IntegerField() # 'foo__bar' has two underscores!
98
 
 
99
 
These limitations can be worked around, though, because your field name doesn't
100
 
necessarily have to match your database column name. See `db_column`_ below.
101
 
 
102
 
SQL reserved words, such as ``join``, ``where`` or ``select``, *are* allowed as
103
 
model field names, because Django escapes all database table names and column
104
 
names in every underlying SQL query. It uses the quoting syntax of your
105
 
particular database engine.
106
 
 
107
 
Field types
108
 
-----------
109
 
 
110
 
Each field in your model should be an instance of the appropriate ``Field``
111
 
class. Django uses the field class types to determine a few things:
112
 
 
113
 
    * The database column type (e.g. ``INTEGER``, ``VARCHAR``).
114
 
    * The widget to use in Django's admin interface, if you care to use it
115
 
      (e.g. ``<input type="text">``, ``<select>``).
116
 
    * The minimal validation requirements, used in Django's admin and in
117
 
      manipulators.
118
 
 
119
 
Here are all available field types:
120
 
 
121
 
``AutoField``
122
 
~~~~~~~~~~~~~
123
 
 
124
 
An ``IntegerField`` that automatically increments according to available IDs.
125
 
You usually won't need to use this directly; a primary key field will
126
 
automatically be added to your model if you don't specify otherwise. See
127
 
`Automatic primary key fields`_.
128
 
 
129
 
``BooleanField``
130
 
~~~~~~~~~~~~~~~~
131
 
 
132
 
A true/false field.
133
 
 
134
 
The admin represents this as a checkbox.
135
 
 
136
 
``CharField``
137
 
~~~~~~~~~~~~~
138
 
 
139
 
A string field, for small- to large-sized strings.
140
 
 
141
 
For large amounts of text, use ``TextField``.
142
 
 
143
 
The admin represents this as an ``<input type="text">`` (a single-line input).
144
 
 
145
 
``CharField`` has an extra required argument, ``maxlength``, the maximum length
146
 
(in characters) of the field. The maxlength is enforced at the database level
147
 
and in Django's validation.
148
 
 
149
 
``CommaSeparatedIntegerField``
150
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
151
 
 
152
 
A field of integers separated by commas. As in ``CharField``, the ``maxlength``
153
 
argument is required.
154
 
 
155
 
``DateField``
156
 
~~~~~~~~~~~~~
157
 
 
158
 
A date field. Has a few extra optional arguments:
159
 
 
160
 
    ======================  ===================================================
161
 
    Argument                Description
162
 
    ======================  ===================================================
163
 
    ``auto_now``            Automatically set the field to now every time the
164
 
                            object is saved. Useful for "last-modified"
165
 
                            timestamps. Note that the current date is *always*
166
 
                            used; it's not just a default value that you can
167
 
                            override.
168
 
 
169
 
    ``auto_now_add``        Automatically set the field to now when the object
170
 
                            is first created. Useful for creation of
171
 
                            timestamps. Note that the current date is *always*
172
 
                            used; it's not just a default value that you can
173
 
                            override.
174
 
    ======================  ===================================================
175
 
 
176
 
The admin represents this as an ``<input type="text">`` with a JavaScript
177
 
calendar and a shortcut for "Today."
178
 
 
179
 
``DateTimeField``
180
 
~~~~~~~~~~~~~~~~~
181
 
 
182
 
A date and time field. Takes the same extra options as ``DateField``.
183
 
 
184
 
The admin represents this as two ``<input type="text">`` fields, with
185
 
JavaScript shortcuts.
186
 
 
187
 
``EmailField``
188
 
~~~~~~~~~~~~~~
189
 
 
190
 
A ``CharField`` that checks that the value is a valid e-mail address.
191
 
This doesn't accept ``maxlength``; its ``maxlength`` is automatically set to
192
 
75.
193
 
 
194
 
``FileField``
195
 
~~~~~~~~~~~~~
196
 
 
197
 
A file-upload field.
198
 
 
199
 
Has an extra required argument, ``upload_to``, a local filesystem path to
200
 
which files should be upload. This path may contain `strftime formatting`_,
201
 
which will be replaced by the date/time of the file upload (so that
202
 
uploaded files don't fill up the given directory).
203
 
 
204
 
The admin represents this as an ``<input type="file">`` (a file-upload widget).
205
 
 
206
 
Using a ``FileField`` or an ``ImageField`` (see below) in a model takes a few
207
 
steps:
208
 
 
209
 
    1. In your settings file, you'll need to define ``MEDIA_ROOT`` as the
210
 
       full path to a directory where you'd like Django to store uploaded
211
 
       files. (For performance, these files are not stored in the database.)
212
 
       Define ``MEDIA_URL`` as the base public URL of that directory. Make
213
 
       sure that this directory is writable by the Web server's user
214
 
       account.
215
 
 
216
 
    2. Add the ``FileField`` or ``ImageField`` to your model, making sure
217
 
       to define the ``upload_to`` option to tell Django to which
218
 
       subdirectory of ``MEDIA_ROOT`` it should upload files.
219
 
 
220
 
    3. All that will be stored in your database is a path to the file
221
 
       (relative to ``MEDIA_ROOT``). You'll most likely want to use the
222
 
       convenience ``get_<fieldname>_url`` function provided by Django. For
223
 
       example, if your ``ImageField`` is called ``mug_shot``, you can get
224
 
       the absolute URL to your image in a template with ``{{
225
 
       object.get_mug_shot_url }}``.
226
 
 
227
 
For example, say your ``MEDIA_ROOT`` is set to ``'/home/media'``, and
228
 
``upload_to`` is set to ``'photos/%Y/%m/%d'``. The ``'%Y/%m/%d'`` part of
229
 
``upload_to`` is strftime formatting; ``'%Y'`` is the four-digit year,
230
 
``'%m'`` is the two-digit month and ``'%d'`` is the two-digit day. If you
231
 
upload a file on Jan. 15, 2007, it will be saved in the directory
232
 
``/home/media/photos/2007/01/15``.
233
 
 
234
 
Note that whenever you deal with uploaded files, you should pay close attention
235
 
to where you're uploading them and what type of files they are, to avoid
236
 
security holes. *Validate all uploaded files* so that you're sure the files are
237
 
what you think they are. For example, if you blindly let somebody upload files,
238
 
without validation, to a directory that's within your Web server's document
239
 
root, then somebody could upload a CGI or PHP script and execute that script by
240
 
visiting its URL on your site. Don't allow that.
241
 
 
242
 
.. _`strftime formatting`: http://docs.python.org/lib/module-time.html#l2h-1941
243
 
 
244
 
``FilePathField``
245
 
~~~~~~~~~~~~~~~~~
246
 
 
247
 
A field whose choices are limited to the filenames in a certain directory
248
 
on the filesystem. Has three special arguments, of which the first is
249
 
required:
250
 
 
251
 
    ======================  ===================================================
252
 
    Argument                Description
253
 
    ======================  ===================================================
254
 
    ``path``                Required. The absolute filesystem path to a
255
 
                            directory from which this ``FilePathField`` should
256
 
                            get its choices. Example: ``"/home/images"``.
257
 
 
258
 
    ``match``               Optional. A regular expression, as a string, that
259
 
                            ``FilePathField`` will use to filter filenames.
260
 
                            Note that the regex will be applied to the
261
 
                            base filename, not the full path. Example:
262
 
                            ``"foo.*\.txt^"``, which will match a file called
263
 
                            ``foo23.txt`` but not ``bar.txt`` or ``foo23.gif``.
264
 
 
265
 
    ``recursive``           Optional. Either ``True`` or ``False``. Default is
266
 
                            ``False``. Specifies whether all subdirectories of
267
 
                            ``path`` should be included.
268
 
    ======================  ===================================================
269
 
 
270
 
Of course, these arguments can be used together.
271
 
 
272
 
The one potential gotcha is that ``match`` applies to the base filename,
273
 
not the full path. So, this example::
274
 
 
275
 
    FilePathField(path="/home/images", match="foo.*", recursive=True)
276
 
 
277
 
...will match ``/home/images/foo.gif`` but not ``/home/images/foo/bar.gif``
278
 
because the ``match`` applies to the base filename (``foo.gif`` and
279
 
``bar.gif``).
280
 
 
281
 
``FloatField``
282
 
~~~~~~~~~~~~~~
283
 
 
284
 
A floating-point number. Has two **required** arguments:
285
 
 
286
 
    ======================  ===================================================
287
 
    Argument                Description
288
 
    ======================  ===================================================
289
 
    ``max_digits``          The maximum number of digits allowed in the number.
290
 
 
291
 
    ``decimal_places``      The number of decimal places to store with the
292
 
                            number.
293
 
    ======================  ===================================================
294
 
 
295
 
For example, to store numbers up to 999 with a resolution of 2 decimal places,
296
 
you'd use::
297
 
 
298
 
    models.FloatField(..., max_digits=5, decimal_places=2)
299
 
 
300
 
And to store numbers up to approximately one billion with a resolution of 10
301
 
decimal places::
302
 
 
303
 
    models.FloatField(..., max_digits=19, decimal_places=10)
304
 
 
305
 
The admin represents this as an ``<input type="text">`` (a single-line input).
306
 
 
307
 
``ImageField``
308
 
~~~~~~~~~~~~~~
309
 
 
310
 
Like ``FileField``, but validates that the uploaded object is a valid
311
 
image. Has two extra optional arguments, ``height_field`` and
312
 
``width_field``, which, if set, will be auto-populated with the height and
313
 
width of the image each time a model instance is saved.
314
 
 
315
 
Requires the `Python Imaging Library`_.
316
 
 
317
 
.. _Python Imaging Library: http://www.pythonware.com/products/pil/
318
 
 
319
 
``IntegerField``
320
 
~~~~~~~~~~~~~~~~
321
 
 
322
 
An integer.
323
 
 
324
 
The admin represents this as an ``<input type="text">`` (a single-line input).
325
 
 
326
 
``IPAddressField``
327
 
~~~~~~~~~~~~~~~~~~
328
 
 
329
 
An IP address, in string format (i.e. "24.124.1.30").
330
 
 
331
 
The admin represents this as an ``<input type="text">`` (a single-line input).
332
 
 
333
 
``NullBooleanField``
334
 
~~~~~~~~~~~~~~~~~~~~
335
 
 
336
 
Like a ``BooleanField``, but allows ``NULL`` as one of the options.  Use this
337
 
instead of a ``BooleanField`` with ``null=True``.
338
 
 
339
 
The admin represents this as a ``<select>`` box with "Unknown", "Yes" and "No" choices.
340
 
 
341
 
``PhoneNumberField``
342
 
~~~~~~~~~~~~~~~~~~~~
343
 
 
344
 
A ``CharField`` that checks that the value is a valid U.S.A.-style phone
345
 
number (in the format ``XXX-XXX-XXXX``).
346
 
 
347
 
``PositiveIntegerField``
348
 
~~~~~~~~~~~~~~~~~~~~~~~~
349
 
 
350
 
Like an ``IntegerField``, but must be positive.
351
 
 
352
 
``PositiveSmallIntegerField``
353
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
354
 
 
355
 
Like a ``PositiveIntegerField``, but only allows values under a certain
356
 
(database-dependent) point.
357
 
 
358
 
``SlugField``
359
 
~~~~~~~~~~~~~
360
 
 
361
 
"Slug" is a newspaper term. A slug is a short label for something,
362
 
containing only letters, numbers, underscores or hyphens. They're generally
363
 
used in URLs.
364
 
 
365
 
Like a CharField, you can specify ``maxlength``. If ``maxlength`` is
366
 
not specified, Django will use a default length of 50.
367
 
 
368
 
Implies ``db_index=True``.
369
 
 
370
 
Accepts an extra option, ``prepopulate_from``, which is a list of fields
371
 
from which to auto-populate the slug, via JavaScript, in the object's admin
372
 
form::
373
 
 
374
 
    models.SlugField(prepopulate_from=("pre_name", "name"))
375
 
 
376
 
``prepopulate_from`` doesn't accept DateTimeFields.
377
 
 
378
 
The admin represents ``SlugField`` as an ``<input type="text">`` (a
379
 
single-line input).
380
 
 
381
 
``SmallIntegerField``
382
 
~~~~~~~~~~~~~~~~~~~~~
383
 
 
384
 
Like an ``IntegerField``, but only allows values under a certain
385
 
(database-dependent) point.
386
 
 
387
 
``TextField``
388
 
~~~~~~~~~~~~~
389
 
 
390
 
A large text field.
391
 
 
392
 
The admin represents this as a ``<textarea>`` (a multi-line input).
393
 
 
394
 
``TimeField``
395
 
~~~~~~~~~~~~~
396
 
 
397
 
A time. Accepts the same auto-population options as ``DateField`` and
398
 
``DateTimeField``.
399
 
 
400
 
The admin represents this as an ``<input type="text">`` with some
401
 
JavaScript shortcuts.
402
 
 
403
 
``URLField``
404
 
~~~~~~~~~~~~
405
 
 
406
 
A field for a URL. If the ``verify_exists`` option is ``True`` (default),
407
 
the URL given will be checked for existence (i.e., the URL actually loads
408
 
and doesn't give a 404 response).
409
 
 
410
 
The admin represents this as an ``<input type="text">`` (a single-line input).
411
 
 
412
 
``USStateField``
413
 
~~~~~~~~~~~~~~~~
414
 
 
415
 
A two-letter U.S. state abbreviation.
416
 
 
417
 
The admin represents this as an ``<input type="text">`` (a single-line input).
418
 
 
419
 
``XMLField``
420
 
~~~~~~~~~~~~
421
 
 
422
 
A ``TextField`` that checks that the value is valid XML that matches a
423
 
given schema. Takes one required argument, ``schema_path``, which is the
424
 
filesystem path to a RelaxNG_ schema against which to validate the field.
425
 
 
426
 
.. _RelaxNG: http://www.relaxng.org/
427
 
 
428
 
Field options
429
 
-------------
430
 
 
431
 
The following arguments are available to all field types. All are optional.
432
 
 
433
 
``null``
434
 
~~~~~~~~
435
 
 
436
 
If ``True``, Django will store empty values as ``NULL`` in the database.
437
 
Default is ``False``.
438
 
 
439
 
Note that empty string values will always get stored as empty strings, not
440
 
as ``NULL`` -- so use ``null=True`` for non-string fields such as integers,
441
 
booleans and dates.
442
 
 
443
 
Avoid using ``null`` on string-based fields such as ``CharField`` and
444
 
``TextField`` unless you have an excellent reason. If a string-based field
445
 
has ``null=True``, that means it has two possible values for "no data":
446
 
``NULL``, and the empty string. In most cases, it's redundant to have two
447
 
possible values for "no data;" Django convention is to use the empty
448
 
string, not ``NULL``.
449
 
 
450
 
``blank``
451
 
~~~~~~~~~
452
 
 
453
 
If ``True``, the field is allowed to be blank.
454
 
 
455
 
Note that this is different than ``null``. ``null`` is purely
456
 
database-related, whereas ``blank`` is validation-related. If a field has
457
 
``blank=True``, validation on Django's admin site will allow entry of an
458
 
empty value. If a field has ``blank=False``, the field will be required.
459
 
 
460
 
``choices``
461
 
~~~~~~~~~~~
462
 
 
463
 
An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this
464
 
field.
465
 
 
466
 
If this is given, Django's admin will use a select box instead of the
467
 
standard text field and will limit choices to the choices given.
468
 
 
469
 
A choices list looks like this::
470
 
 
471
 
    YEAR_IN_SCHOOL_CHOICES = (
472
 
        ('FR', 'Freshman'),
473
 
        ('SO', 'Sophomore'),
474
 
        ('JR', 'Junior'),
475
 
        ('SR', 'Senior'),
476
 
        ('GR', 'Graduate'),
477
 
    )
478
 
 
479
 
The first element in each tuple is the actual value to be stored. The
480
 
second element is the human-readable name for the option.
481
 
 
482
 
The choices list can be defined either as part of your model class::
483
 
 
484
 
    class Foo(models.Model):
485
 
        GENDER_CHOICES = (
486
 
            ('M', 'Male'),
487
 
            ('F', 'Female'),
488
 
        )
489
 
        gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
490
 
 
491
 
or outside your model class altogether::
492
 
 
493
 
    GENDER_CHOICES = (
494
 
        ('M', 'Male'),
495
 
        ('F', 'Female'),
496
 
    )
497
 
    class Foo(models.Model):
498
 
        gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
499
 
 
500
 
For each model field that has ``choices`` set, Django will add a method to
501
 
retrieve the human-readable name for the field's current value. See
502
 
`get_FOO_display`_ in the database API documentation.
503
 
 
504
 
.. _get_FOO_display: ../db_api/#get-foo-display
505
 
 
506
 
Finally, note that choices can be any iterable object -- not necessarily a
507
 
list or tuple. This lets you construct choices dynamically. But if you find
508
 
yourself hacking ``choices`` to be dynamic, you're probably better off using
509
 
a proper database table with a ``ForeignKey``. ``choices`` is meant for static
510
 
data that doesn't change much, if ever.
511
 
 
512
 
``core``
513
 
~~~~~~~~
514
 
 
515
 
For objects that are edited inline to a related object.
516
 
 
517
 
In the Django admin, if all "core" fields in an inline-edited object are
518
 
cleared, the object will be deleted.
519
 
 
520
 
It is an error to have an inline-editable relation without at least one
521
 
``core=True`` field.
522
 
 
523
 
Please note that each field marked "core" is treated as a required field by the
524
 
Django admin site. Essentially, this means you should put ``core=True`` on all
525
 
required fields in your related object that is being edited inline.
526
 
 
527
 
``db_column``
528
 
~~~~~~~~~~~~~
529
 
 
530
 
The name of the database column to use for this field. If this isn't given,
531
 
Django will use the field's name.
532
 
 
533
 
If your database column name is an SQL reserved word, or contains
534
 
characters that aren't allowed in Python variable names -- notably, the
535
 
hyphen -- that's OK. Django quotes column and table names behind the
536
 
scenes.
537
 
 
538
 
``db_index``
539
 
~~~~~~~~~~~~
540
 
 
541
 
If ``True``, ``django-admin.py sqlindexes`` will output a ``CREATE INDEX``
542
 
statement for this field.
543
 
 
544
 
``default``
545
 
~~~~~~~~~~~
546
 
 
547
 
The default value for the field.
548
 
 
549
 
``editable``
550
 
~~~~~~~~~~~~
551
 
 
552
 
If ``False``, the field will not be editable in the admin or via form
553
 
processing using the object's ``AddManipulator`` or ``ChangeManipulator``
554
 
classes. Default is ``True``.
555
 
 
556
 
``help_text``
557
 
~~~~~~~~~~~~~
558
 
 
559
 
Extra "help" text to be displayed under the field on the object's admin
560
 
form. It's useful for documentation even if your object doesn't have an
561
 
admin form.
562
 
 
563
 
``primary_key``
564
 
~~~~~~~~~~~~~~~
565
 
 
566
 
If ``True``, this field is the primary key for the model.
567
 
 
568
 
If you don't specify ``primary_key=True`` for any fields in your model,
569
 
Django will automatically add this field::
570
 
 
571
 
    id = models.AutoField('ID', primary_key=True)
572
 
 
573
 
Thus, you don't need to set ``primary_key=True`` on any of your fields
574
 
unless you want to override the default primary-key behavior.
575
 
 
576
 
``primary_key=True`` implies ``blank=False``, ``null=False`` and
577
 
``unique=True``. Only one primary key is allowed on an object.
578
 
 
579
 
``radio_admin``
580
 
~~~~~~~~~~~~~~~
581
 
 
582
 
By default, Django's admin uses a select-box interface (<select>) for
583
 
fields that are ``ForeignKey`` or have ``choices`` set. If ``radio_admin``
584
 
is set to ``True``, Django will use a radio-button interface instead.
585
 
 
586
 
Don't use this for a field unless it's a ``ForeignKey`` or has ``choices``
587
 
set.
588
 
 
589
 
``unique``
590
 
~~~~~~~~~~
591
 
 
592
 
If ``True``, this field must be unique throughout the table.
593
 
 
594
 
This is enforced at the database level and at the Django admin-form level.
595
 
 
596
 
``unique_for_date``
597
 
~~~~~~~~~~~~~~~~~~~
598
 
 
599
 
Set this to the name of a ``DateField`` or ``DateTimeField`` to require
600
 
that this field be unique for the value of the date field.
601
 
 
602
 
For example, if you have a field ``title`` that has
603
 
``unique_for_date="pub_date"``, then Django wouldn't allow the entry of
604
 
two records with the same ``title`` and ``pub_date``.
605
 
 
606
 
This is enforced at the Django admin-form level but not at the database level.
607
 
 
608
 
``unique_for_month``
609
 
~~~~~~~~~~~~~~~~~~~~
610
 
 
611
 
Like ``unique_for_date``, but requires the field to be unique with respect
612
 
to the month.
613
 
 
614
 
``unique_for_year``
615
 
~~~~~~~~~~~~~~~~~~~
616
 
 
617
 
Like ``unique_for_date`` and ``unique_for_month``.
618
 
 
619
 
``validator_list``
620
 
~~~~~~~~~~~~~~~~~~
621
 
 
622
 
A list of extra validators to apply to the field. Each should be a callable
623
 
that takes the parameters ``field_data, all_data`` and raises
624
 
``django.core.validators.ValidationError`` for errors. (See the
625
 
`validator docs`_.)
626
 
 
627
 
Django comes with quite a few validators. They're in ``django.core.validators``.
628
 
 
629
 
.. _validator docs: http://www.djangoproject.com/documentation/forms/#validators
630
 
 
631
 
Verbose field names
632
 
-------------------
633
 
 
634
 
Each field type, except for ``ForeignKey``, ``ManyToManyField`` and
635
 
``OneToOneField``, takes an optional first positional argument -- a
636
 
verbose name. If the verbose name isn't given, Django will automatically create
637
 
it using the field's attribute name, converting underscores to spaces.
638
 
 
639
 
In this example, the verbose name is ``"Person's first name"``::
640
 
 
641
 
    first_name = models.CharField("Person's first name", maxlength=30)
642
 
 
643
 
In this example, the verbose name is ``"first name"``::
644
 
 
645
 
    first_name = models.CharField(maxlength=30)
646
 
 
647
 
``ForeignKey``, ``ManyToManyField`` and ``OneToOneField`` require the first
648
 
argument to be a model class, so use the ``verbose_name`` keyword argument::
649
 
 
650
 
    poll = models.ForeignKey(Poll, verbose_name="the related poll")
651
 
    sites = models.ManyToManyField(Site, verbose_name="list of sites")
652
 
    place = models.OneToOneField(Place, verbose_name="related place")
653
 
 
654
 
Convention is not to capitalize the first letter of the ``verbose_name``.
655
 
Django will automatically capitalize the first letter where it needs to.
656
 
 
657
 
Relationships
658
 
-------------
659
 
 
660
 
Clearly, the power of relational databases lies in relating tables to each
661
 
other. Django offers ways to define the three most common types of database
662
 
relationships: Many-to-one, many-to-many and one-to-one.
663
 
 
664
 
Many-to-one relationships
665
 
~~~~~~~~~~~~~~~~~~~~~~~~~
666
 
 
667
 
To define a many-to-one relationship, use ``ForeignKey``. You use it just like
668
 
any other ``Field`` type: by including it as a class attribute of your model.
669
 
 
670
 
``ForeignKey`` requires a positional argument: The class to which the model is
671
 
related.
672
 
 
673
 
For example, if a ``Car`` model has a ``Manufacturer`` -- that is, a
674
 
``Manufacturer`` makes multiple cars but each ``Car`` only has one
675
 
``Manufacturer`` -- use the following definitions::
676
 
 
677
 
    class Manufacturer(models.Model):
678
 
        # ...
679
 
 
680
 
    class Car(models.Model):
681
 
        manufacturer = models.ForeignKey(Manufacturer)
682
 
        # ...
683
 
 
684
 
To create a recursive relationship -- an object that has a many-to-one
685
 
relationship with itself -- use ``models.ForeignKey('self')``.
686
 
 
687
 
If you need to create a relationship on a model that has not yet been defined,
688
 
you can use the name of the model, rather than the model object itself::
689
 
 
690
 
    class Car(models.Model):
691
 
        manufacturer = models.ForeignKey('Manufacturer')
692
 
        # ...
693
 
 
694
 
    class Manufacturer(models.Model):
695
 
        # ...
696
 
 
697
 
Note, however, that you can only use strings to refer to models in the same
698
 
models.py file -- you cannot use a string to reference a model in a different
699
 
application, or to reference a model that has been imported from elsewhere.
700
 
 
701
 
Behind the scenes, Django appends ``"_id"`` to the field name to create its
702
 
database column name. In the above example, the database table for the ``Car``
703
 
model will have a ``manufacturer_id`` column. (You can change this explicitly
704
 
by specifying ``db_column``; see ``db_column`` below.)  However, your code
705
 
should never have to deal with the database column name, unless you write
706
 
custom SQL. You'll always deal with the field names of your model object.
707
 
 
708
 
It's suggested, but not required, that the name of a ``ForeignKey`` field
709
 
(``manufacturer`` in the example above) be the name of the model, lowercase.
710
 
You can, of course, call the field whatever you want. For example::
711
 
 
712
 
    class Car(models.Model):
713
 
        company_that_makes_it = models.ForeignKey(Manufacturer)
714
 
        # ...
715
 
 
716
 
See the `Many-to-one relationship model example`_ for a full example.
717
 
 
718
 
.. _Many-to-one relationship model example: http://www.djangoproject.com/documentation/models/many_to_one/
719
 
 
720
 
``ForeignKey`` fields take a number of extra arguments for defining how the
721
 
relationship should work. All are optional:
722
 
 
723
 
    =======================  ============================================================
724
 
    Argument                 Description
725
 
    =======================  ============================================================
726
 
    ``edit_inline``          If not ``False``, this related object is edited
727
 
                             "inline" on the related object's page. This means
728
 
                             that the object will not have its own admin
729
 
                             interface. Use either ``models.TABULAR`` or ``models.STACKED``,
730
 
                             which, respectively, designate whether the inline-editable
731
 
                             objects are displayed as a table or as a "stack" of
732
 
                             fieldsets.
733
 
 
734
 
    ``limit_choices_to``     A dictionary of lookup arguments and values (see
735
 
                             the `Database API reference`_) that limit the
736
 
                             available admin choices for this object. Use this
737
 
                             with ``models.LazyDate`` to limit choices of objects
738
 
                             by date. For example::
739
 
 
740
 
                                limit_choices_to = {'pub_date__lte': models.LazyDate()}
741
 
 
742
 
                             only allows the choice of related objects with a
743
 
                             ``pub_date`` before the current date/time to be
744
 
                             chosen.
745
 
 
746
 
                             Instead of a dictionary this can also be a ``Q`` object
747
 
                             (an object with a ``get_sql()`` method) for more complex
748
 
                             queries.
749
 
 
750
 
                             Not compatible with ``edit_inline``.
751
 
 
752
 
    ``max_num_in_admin``     For inline-edited objects, this is the maximum
753
 
                             number of related objects to display in the admin.
754
 
                             Thus, if a pizza could only have up to 10
755
 
                             toppings, ``max_num_in_admin=10`` would ensure
756
 
                             that a user never enters more than 10 toppings.
757
 
 
758
 
                             Note that this doesn't ensure more than 10 related
759
 
                             toppings ever get created. It simply controls the
760
 
                             admin interface; it doesn't enforce things at the
761
 
                             Python API level or database level.
762
 
 
763
 
    ``min_num_in_admin``     The minimum number of related objects displayed in
764
 
                             the admin. Normally, at the creation stage,
765
 
                             ``num_in_admin`` inline objects are shown, and at
766
 
                             the edit stage ``num_extra_on_change`` blank
767
 
                             objects are shown in addition to all pre-existing
768
 
                             related objects.  However, no fewer than
769
 
                             ``min_num_in_admin`` related objects will ever be
770
 
                             displayed.
771
 
 
772
 
    ``num_extra_on_change``  The number of extra blank related-object fields to
773
 
                             show at the change stage.
774
 
 
775
 
    ``num_in_admin``         The default number of inline objects to display
776
 
                             on the object page at the add stage.
777
 
 
778
 
    ``raw_id_admin``         Only display a field for the integer to be entered
779
 
                             instead of a drop-down menu. This is useful when
780
 
                             related to an object type that will have too many
781
 
                             rows to make a select box practical.
782
 
 
783
 
                             Not used with ``edit_inline``.
784
 
 
785
 
    ``related_name``         The name to use for the relation from the related
786
 
                             object back to this one. See the
787
 
                             `related objects documentation`_ for a full
788
 
                             explanation and example.
789
 
 
790
 
    ``to_field``             The field on the related object that the relation
791
 
                             is to. By default, Django uses the primary key of
792
 
                             the related object.
793
 
    =======================  ============================================================
794
 
 
795
 
.. _`Database API reference`: http://www.djangoproject.com/documentation/db_api/
796
 
.. _related objects documentation: http://www.djangoproject.com/documentation/db_api/#related-objects
797
 
 
798
 
Many-to-many relationships
799
 
~~~~~~~~~~~~~~~~~~~~~~~~~~
800
 
 
801
 
To define a many-to-many relationship, use ``ManyToManyField``. You use it just
802
 
like any other ``Field`` type: by including it as a class attribute of your
803
 
model.
804
 
 
805
 
``ManyToManyField`` requires a positional argument: The class to which the
806
 
model is related.
807
 
 
808
 
For example, if a ``Pizza`` has multiple ``Topping`` objects -- that is, a
809
 
``Topping`` can be on multiple pizzas and each ``Pizza`` has multiple toppings --
810
 
here's how you'd represent that::
811
 
 
812
 
    class Topping(models.Model):
813
 
        # ...
814
 
 
815
 
    class Pizza(models.Model):
816
 
        # ...
817
 
        toppings = models.ManyToManyField(Topping)
818
 
 
819
 
As with ``ForeignKey``, a relationship to self can be defined by using the
820
 
string ``'self'`` instead of the model name, and you can refer to as-yet
821
 
undefined models by using a string containing the model name. However, you
822
 
can only use strings to refer to models in the same models.py file -- you
823
 
cannot use a string to reference a model in a different application, or to
824
 
reference a model that has been imported from elsewhere.
825
 
 
826
 
It's suggested, but not required, that the name of a ``ManyToManyField``
827
 
(``toppings`` in the example above) be a plural describing the set of related
828
 
model objects.
829
 
 
830
 
Behind the scenes, Django creates an intermediary join table to represent the
831
 
many-to-many relationship.
832
 
 
833
 
It doesn't matter which model gets the ``ManyToManyField``, but you only need
834
 
it in one of the models -- not in both.
835
 
 
836
 
Generally, ``ManyToManyField`` instances should go in the object that's going
837
 
to be edited in the admin interface, if you're using Django's admin. In the
838
 
above example, ``toppings`` is in ``Pizza`` (rather than ``Topping`` having a
839
 
``pizzas`` ``ManyToManyField`` ) because it's more natural to think about a
840
 
``Pizza`` having toppings than a topping being on multiple pizzas. The way it's
841
 
set up above, the ``Pizza`` admin form would let users select the toppings.
842
 
 
843
 
See the `Many-to-many relationship model example`_ for a full example.
844
 
 
845
 
.. _Many-to-many relationship model example: http://www.djangoproject.com/documentation/models/many_to_many/
846
 
 
847
 
``ManyToManyField`` objects take a number of extra arguments for defining how
848
 
the relationship should work. All are optional:
849
 
 
850
 
    =======================  ============================================================
851
 
    Argument                 Description
852
 
    =======================  ============================================================
853
 
    ``related_name``         See the description under ``ForeignKey`` above.
854
 
 
855
 
    ``filter_interface``     Use a nifty unobtrusive Javascript "filter" interface
856
 
                             instead of the usability-challenged ``<select multiple>``
857
 
                             in the admin form for this object. The value should be
858
 
                             ``models.HORIZONTAL`` or ``models.VERTICAL`` (i.e.
859
 
                             should the interface be stacked horizontally or
860
 
                             vertically).
861
 
 
862
 
    ``limit_choices_to``     See the description under ``ForeignKey`` above.
863
 
 
864
 
    ``symmetrical``          Only used in the definition of ManyToManyFields on self.
865
 
                             Consider the following model:
866
 
 
867
 
                             class Person(models.Model):
868
 
                                 friends = models.ManyToManyField("self")
869
 
 
870
 
                             When Django processes this model, it identifies that it has
871
 
                             a ``ManyToManyField`` on itself, and as a result, it
872
 
                             doesn't add a ``person_set`` attribute to the ``Person``
873
 
                             class. Instead, the ``ManyToManyField`` is assumed to be
874
 
                             symmetrical -- that is, if I am your friend, then you are
875
 
                             my friend.
876
 
 
877
 
                             If you do not want symmetry in ``ManyToMany`` relationships
878
 
                             with ``self``, set ``symmetrical`` to ``False``. This will
879
 
                             force Django to add the descriptor for the reverse
880
 
                             relationship, allowing ``ManyToMany`` relationships to be
881
 
                             non-symmetrical.
882
 
 
883
 
    ``db_table``             The name of the table to create for storing the many-to-many
884
 
                             data. If this is not provided, Django will assume a default
885
 
                             name based upon the names of the two tables being joined.
886
 
 
887
 
    =======================  ============================================================
888
 
 
889
 
One-to-one relationships
890
 
~~~~~~~~~~~~~~~~~~~~~~~~
891
 
 
892
 
The semantics of one-to-one relationships will be changing soon, so we don't
893
 
recommend you use them. If that doesn't scare you away, keep reading.
894
 
 
895
 
To define a one-to-one relationship, use ``OneToOneField``. You use it just
896
 
like any other ``Field`` type: by including it as a class attribute of your
897
 
model.
898
 
 
899
 
This is most useful on the primary key of an object when that object "extends"
900
 
another object in some way.
901
 
 
902
 
``OneToOneField`` requires a positional argument: The class to which the
903
 
model is related.
904
 
 
905
 
For example, if you're building a database of "places", you would build pretty
906
 
standard stuff such as address, phone number, etc. in the database. Then, if you
907
 
wanted to build a database of restaurants on top of the places, instead of
908
 
repeating yourself and replicating those fields in the ``Restaurant`` model, you
909
 
could make ``Restaurant`` have a ``OneToOneField`` to ``Place`` (because a
910
 
restaurant "is-a" place).
911
 
 
912
 
As with ``ForeignKey``, a relationship to self can be defined by using the
913
 
string ``"self"`` instead of the model name; references to as-yet undefined
914
 
models can be made by using a string containing the model name.
915
 
 
916
 
This ``OneToOneField`` will actually replace the primary key ``id`` field
917
 
(since one-to-one relations share the same primary key), and will be displayed
918
 
as a read-only field when you edit an object in the admin interface:
919
 
 
920
 
See the `One-to-one relationship model example`_ for a full example.
921
 
 
922
 
.. _One-to-one relationship model example: http://www.djangoproject.com/documentation/models/one_to_one/
923
 
 
924
 
Meta options
925
 
============
926
 
 
927
 
Give your model metadata by using an inner ``class Meta``, like so::
928
 
 
929
 
    class Foo(models.Model):
930
 
        bar = models.CharField(maxlength=30)
931
 
 
932
 
        class Meta:
933
 
            # ...
934
 
 
935
 
Model metadata is "anything that's not a field", such as ordering options, etc.
936
 
 
937
 
Here's a list of all possible ``Meta`` options. No options are required. Adding
938
 
``class Meta`` to a model is completely optional.
939
 
 
940
 
``db_table``
941
 
------------
942
 
 
943
 
The name of the database table to use for the model::
944
 
 
945
 
    db_table = 'music_album'
946
 
 
947
 
If this isn't given, Django will use ``app_label + '_' + model_class_name``.
948
 
See "Table names" below for more.
949
 
 
950
 
If your database table name is an SQL reserved word, or contains characters
951
 
that aren't allowed in Python variable names -- notably, the hyphen --
952
 
that's OK. Django quotes column and table names behind the scenes.
953
 
 
954
 
``get_latest_by``
955
 
-----------------
956
 
 
957
 
The name of a ``DateField`` or ``DateTimeField`` in the model. This specifies
958
 
the default field to use in your model ``Manager``'s ``latest()`` method.
959
 
 
960
 
Example::
961
 
 
962
 
    get_latest_by = "order_date"
963
 
 
964
 
See the `docs for latest()`_ for more.
965
 
 
966
 
.. _docs for latest(): http://www.djangoproject.com/documentation/db_api/#latest-field-name-none
967
 
 
968
 
``order_with_respect_to``
969
 
-------------------------
970
 
 
971
 
Marks this object as "orderable" with respect to the given field. This is
972
 
almost always used with related objects to allow them to be ordered with
973
 
respect to a parent object. For example, if an ``Answer`` relates to a
974
 
``Question`` object, and a question has more than one answer, and the order
975
 
of answers matters, you'd do this::
976
 
 
977
 
    class Answer(models.Model):
978
 
        question = models.ForeignKey(Question)
979
 
        # ...
980
 
 
981
 
        class Meta:
982
 
            order_with_respect_to = 'question'
983
 
 
984
 
``ordering``
985
 
------------
986
 
 
987
 
The default ordering for the object, for use when obtaining lists of objects::
988
 
 
989
 
    ordering = ['-order_date']
990
 
 
991
 
This is a tuple or list of strings. Each string is a field name with an
992
 
optional "-" prefix, which indicates descending order. Fields without a
993
 
leading "-" will be ordered ascending. Use the string "?" to order randomly.
994
 
 
995
 
For example, to order by a ``pub_date`` field ascending, use this::
996
 
 
997
 
    ordering = ['pub_date']
998
 
 
999
 
To order by ``pub_date`` descending, use this::
1000
 
 
1001
 
    ordering = ['-pub_date']
1002
 
 
1003
 
To order by ``pub_date`` descending, then by ``author`` ascending, use this::
1004
 
 
1005
 
    ordering = ['-pub_date', 'author']
1006
 
 
1007
 
See `Specifying ordering`_ for more examples.
1008
 
 
1009
 
Note that, regardless of how many fields are in ``ordering``, the admin
1010
 
site uses only the first field.
1011
 
 
1012
 
.. _Specifying ordering: http://www.djangoproject.com/documentation/models/ordering/
1013
 
 
1014
 
``permissions``
1015
 
---------------
1016
 
 
1017
 
Extra permissions to enter into the permissions table when creating this
1018
 
object. Add, delete and change permissions are automatically created for
1019
 
each object that has ``admin`` set. This example specifies an extra
1020
 
permission, ``can_deliver_pizzas``::
1021
 
 
1022
 
    permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)
1023
 
 
1024
 
This is a list or tuple of 2-tuples in the format
1025
 
``(permission_code, human_readable_permission_name)``.
1026
 
 
1027
 
``unique_together``
1028
 
-------------------
1029
 
 
1030
 
Sets of field names that, taken together, must be unique::
1031
 
 
1032
 
    unique_together = (("driver", "restaurant"),)
1033
 
 
1034
 
This is a list of lists of fields that must be unique when considered
1035
 
together. It's used in the Django admin and is enforced at the database
1036
 
level (i.e., the appropriate ``UNIQUE`` statements are included in the
1037
 
``CREATE TABLE`` statement).
1038
 
 
1039
 
``verbose_name``
1040
 
----------------
1041
 
 
1042
 
A human-readable name for the object, singular::
1043
 
 
1044
 
    verbose_name = "pizza"
1045
 
 
1046
 
If this isn't given, Django will use a munged version of the class name:
1047
 
``CamelCase`` becomes ``camel case``.
1048
 
 
1049
 
``verbose_name_plural``
1050
 
-----------------------
1051
 
 
1052
 
The plural name for the object::
1053
 
 
1054
 
    verbose_name_plural = "stories"
1055
 
 
1056
 
If this isn't given, Django will use ``verbose_name + "s"``.
1057
 
 
1058
 
Table names
1059
 
===========
1060
 
 
1061
 
To save you time, Django automatically derives the name of the database table
1062
 
from the name of your model class and the app that contains it. A model's
1063
 
database table name is constructed by joining the model's "app label" -- the
1064
 
name you used in ``manage.py startapp`` -- to the model's class name, with an
1065
 
underscore between them.
1066
 
 
1067
 
For example, if you have an app ``bookstore`` (as created by
1068
 
``manage.py startapp bookstore``), a model defined as ``class Book`` will have
1069
 
a database table named ``bookstore_book``.
1070
 
 
1071
 
To override the database table name, use the ``db_table`` parameter in
1072
 
``class Meta``.
1073
 
 
1074
 
Automatic primary key fields
1075
 
============================
1076
 
 
1077
 
By default, Django gives each model the following field::
1078
 
 
1079
 
    id = models.AutoField(primary_key=True)
1080
 
 
1081
 
This is an auto-incrementing primary key.
1082
 
 
1083
 
If you'd like to specify a custom primary key, just specify ``primary_key=True``
1084
 
on one of your fields. If Django sees you've explicitly set ``primary_key``, it
1085
 
won't add the automatic ``id`` column.
1086
 
 
1087
 
Each model requires exactly one field to have ``primary_key=True``.
1088
 
 
1089
 
Admin options
1090
 
=============
1091
 
 
1092
 
If you want your model to be visible to Django's admin site, give your model an
1093
 
inner ``"class Admin"``, like so::
1094
 
 
1095
 
    class Person(models.Model):
1096
 
        first_name = models.CharField(maxlength=30)
1097
 
        last_name = models.CharField(maxlength=30)
1098
 
 
1099
 
        class Admin:
1100
 
            # Admin options go here
1101
 
            pass
1102
 
 
1103
 
The ``Admin`` class tells Django how to display the model in the admin site.
1104
 
 
1105
 
Here's a list of all possible ``Admin`` options. None of these options are
1106
 
required. To use an admin interface without specifying any options, use
1107
 
``pass``, like so::
1108
 
 
1109
 
    class Admin:
1110
 
        pass
1111
 
 
1112
 
Adding ``class Admin`` to a model is completely optional.
1113
 
 
1114
 
``date_hierarchy``
1115
 
------------------
1116
 
 
1117
 
Set ``date_hierarchy`` to the name of a ``DateField`` or ``DateTimeField`` in
1118
 
your model, and the change list page will include a date-based drilldown
1119
 
navigation by that field.
1120
 
 
1121
 
Example::
1122
 
 
1123
 
    date_hierarchy = 'pub_date'
1124
 
 
1125
 
``fields``
1126
 
----------
1127
 
 
1128
 
Set ``fields`` to control the layout of admin "add" and "change" pages.
1129
 
 
1130
 
``fields`` is a list of two-tuples, in which each two-tuple represents a
1131
 
``<fieldset>`` on the admin form page. (A ``<fieldset>`` is a "section" of the
1132
 
form.)
1133
 
 
1134
 
The two-tuples are in the format ``(name, field_options)``, where ``name`` is a
1135
 
string representing the title of the fieldset and ``field_options`` is a
1136
 
dictionary of information about the fieldset, including a list of fields to be
1137
 
displayed in it.
1138
 
 
1139
 
A full example, taken from the ``django.contrib.flatpages.FlatPage`` model::
1140
 
 
1141
 
    class Admin:
1142
 
        fields = (
1143
 
            (None, {
1144
 
                'fields': ('url', 'title', 'content', 'sites')
1145
 
            }),
1146
 
            ('Advanced options', {
1147
 
                'classes': 'collapse',
1148
 
                'fields' : ('enable_comments', 'registration_required', 'template_name')
1149
 
            }),
1150
 
        )
1151
 
 
1152
 
This results in an admin page that looks like:
1153
 
 
1154
 
    .. image:: http://media.djangoproject.com/img/doc/flatfiles_admin.png
1155
 
 
1156
 
If ``fields`` isn't given, Django will default to displaying each field that
1157
 
isn't an ``AutoField`` and has ``editable=True``, in a single fieldset, in
1158
 
the same order as the fields are defined in the model.
1159
 
 
1160
 
The ``field_options`` dictionary can have the following keys:
1161
 
 
1162
 
``fields``
1163
 
~~~~~~~~~~
1164
 
 
1165
 
A tuple of field names to display in this fieldset. This key is required.
1166
 
 
1167
 
Example::
1168
 
 
1169
 
    {
1170
 
    'fields': ('first_name', 'last_name', 'address', 'city', 'state'),
1171
 
    }
1172
 
 
1173
 
To display multiple fields on the same line, wrap those fields in their own
1174
 
tuple. In this example, the ``first_name`` and ``last_name`` fields will
1175
 
display on the same line::
1176
 
 
1177
 
    {
1178
 
    'fields': (('first_name', 'last_name'), 'address', 'city', 'state'),
1179
 
    }
1180
 
 
1181
 
``classes``
1182
 
~~~~~~~~~~~
1183
 
 
1184
 
A string containing extra CSS classes to apply to the fieldset.
1185
 
 
1186
 
Example::
1187
 
 
1188
 
    {
1189
 
    'classes': 'wide',
1190
 
    }
1191
 
 
1192
 
Apply multiple classes by separating them with spaces. Example::
1193
 
 
1194
 
    {
1195
 
    'classes': 'wide extrapretty',
1196
 
    }
1197
 
 
1198
 
Two useful classes defined by the default admin-site stylesheet are
1199
 
``collapse`` and ``wide``. Fieldsets with the ``collapse`` style will be
1200
 
initially collapsed in the admin and replaced with a small "click to expand"
1201
 
link. Fieldsets with the ``wide`` style will be given extra horizontal space.
1202
 
 
1203
 
``description``
1204
 
~~~~~~~~~~~~~~~
1205
 
 
1206
 
A string of optional extra text to be displayed at the top of each fieldset,
1207
 
under the heading of the fieldset. It's used verbatim, so you can use any HTML
1208
 
and you must escape any special HTML characters (such as ampersands) yourself.
1209
 
 
1210
 
``js``
1211
 
------
1212
 
 
1213
 
A list of strings representing URLs of JavaScript files to link into the admin
1214
 
screen via ``<script src="">`` tags. This can be used to tweak a given type of
1215
 
admin page in JavaScript or to provide "quick links" to fill in default values
1216
 
for certain fields.
1217
 
 
1218
 
If you use relative URLs -- URLs that don't start with ``http://`` or ``/`` --
1219
 
then the admin site will automatically prefix these links with
1220
 
``settings.ADMIN_MEDIA_PREFIX``.
1221
 
 
1222
 
``list_display``
1223
 
----------------
1224
 
 
1225
 
Set ``list_display`` to control which fields are displayed on the change list
1226
 
page of the admin.
1227
 
 
1228
 
Example::
1229
 
 
1230
 
    list_display = ('first_name', 'last_name')
1231
 
 
1232
 
If you don't set ``list_display``, the admin site will display a single column
1233
 
that displays the ``__str__()`` representation of each object.
1234
 
 
1235
 
A few special cases to note about ``list_display``:
1236
 
 
1237
 
    * If the field is a ``ForeignKey``, Django will display the ``__str__()``
1238
 
      of the related object.
1239
 
 
1240
 
    * ``ManyToManyField`` fields aren't supported, because that would entail
1241
 
      executing a separate SQL statement for each row in the table. If you
1242
 
      want to do this nonetheless, give your model a custom method, and add
1243
 
      that method's name to ``list_display``. (See below for more on custom
1244
 
      methods in ``list_display``.)
1245
 
 
1246
 
    * If the field is a ``BooleanField`` or ``NullBooleanField``, Django will
1247
 
      display a pretty "on" or "off" icon instead of ``True`` or ``False``.
1248
 
 
1249
 
    * If the string given is a method of the model, Django will call it and
1250
 
      display the output. This method should have a ``short_description``
1251
 
      function attribute, for use as the header for the field.
1252
 
 
1253
 
      Here's a full example model::
1254
 
 
1255
 
          class Person(models.Model):
1256
 
              name = models.CharField(maxlength=50)
1257
 
              birthday = models.DateField()
1258
 
 
1259
 
              class Admin:
1260
 
                  list_display = ('name', 'decade_born_in')
1261
 
 
1262
 
              def decade_born_in(self):
1263
 
                  return self.birthday.strftime('%Y')[:3] + "0's"
1264
 
              decade_born_in.short_description = 'Birth decade'
1265
 
 
1266
 
    * If the string given is a method of the model, Django will HTML-escape the
1267
 
      output by default. If you'd rather not escape the output of the method,
1268
 
      give the method an ``allow_tags`` attribute whose value is ``True``.
1269
 
 
1270
 
      Here's a full example model::
1271
 
 
1272
 
          class Person(models.Model):
1273
 
              first_name = models.CharField(maxlength=50)
1274
 
              last_name = models.CharField(maxlength=50)
1275
 
              color_code = models.CharField(maxlength=6)
1276
 
 
1277
 
              class Admin:
1278
 
                  list_display = ('first_name', 'last_name', 'colored_name')
1279
 
 
1280
 
              def colored_name(self):
1281
 
                  return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name)
1282
 
              colored_name.allow_tags = True
1283
 
 
1284
 
    * If the string given is a method of the model that returns True or False
1285
 
      Django will display a pretty "on" or "off" icon if you give the method a
1286
 
      ``boolean`` attribute whose value is ``True``.
1287
 
 
1288
 
      Here's a full example model::
1289
 
 
1290
 
          class Person(models.Model):
1291
 
              first_name = models.CharField(maxlength=50)
1292
 
              birthday = models.DateField()
1293
 
 
1294
 
              class Admin:
1295
 
                  list_display = ('name', 'born_in_fifties')
1296
 
 
1297
 
              def born_in_fifties(self):
1298
 
                  return self.birthday.strftime('%Y')[:3] == 5
1299
 
              born_in_fifties.boolean = True
1300
 
 
1301
 
 
1302
 
    * The ``__str__()`` method is just as valid in ``list_display`` as any
1303
 
      other model method, so it's perfectly OK to do this::
1304
 
 
1305
 
          list_display = ('__str__', 'some_other_field')
1306
 
 
1307
 
    * Usually, elements of ``list_display`` that aren't actual database fields
1308
 
      can't be used in sorting (because Django does all the sorting at the
1309
 
      database level).
1310
 
      
1311
 
      However, if an element of ``list_display`` represents a certain database
1312
 
      field, you can indicate this fact by setting the ``admin_order_field``
1313
 
      attribute of the item.
1314
 
      
1315
 
      For example::
1316
 
      
1317
 
        class Person(models.Model):
1318
 
            first_name = models.CharField(maxlength=50)
1319
 
            color_code = models.CharField(maxlength=6)
1320
 
 
1321
 
            class Admin:
1322
 
                list_display = ('first_name', 'colored_first_name')
1323
 
 
1324
 
            def colored_first_name(self):
1325
 
                return '<span style="color: #%s;">%s</span>' % (self.color_code, self.first_name)
1326
 
            colored_first_name.allow_tags = True
1327
 
            colored_first_name.admin_order_field = 'first_name'
1328
 
    
1329
 
      The above will tell Django to order by the ``first_name`` field when
1330
 
      trying to sort by ``colored_first_name`` in the admin.
1331
 
 
1332
 
``list_display_links``
1333
 
----------------------
1334
 
 
1335
 
Set ``list_display_links`` to control which fields in ``list_display`` should
1336
 
be linked to the "change" page for an object.
1337
 
 
1338
 
By default, the change list page will link the first column -- the first field
1339
 
specified in ``list_display`` -- to the change page for each item. But
1340
 
``list_display_links`` lets you change which columns are linked. Set
1341
 
``list_display_links`` to a list or tuple of field names (in the same format as
1342
 
``list_display``) to link.
1343
 
 
1344
 
``list_display_links`` can specify one or many field names. As long as the
1345
 
field names appear in ``list_display``, Django doesn't care how many (or how
1346
 
few) fields are linked. The only requirement is: If you want to use
1347
 
``list_display_links``, you must define ``list_display``.
1348
 
 
1349
 
In this example, the ``first_name`` and ``last_name`` fields will be linked on
1350
 
the change list page::
1351
 
 
1352
 
    class Admin:
1353
 
        list_display = ('first_name', 'last_name', 'birthday')
1354
 
        list_display_links = ('first_name', 'last_name')
1355
 
 
1356
 
Finally, note that in order to use ``list_display_links``, you must define
1357
 
``list_display``, too.
1358
 
 
1359
 
``list_filter``
1360
 
---------------
1361
 
 
1362
 
Set ``list_filter`` to activate filters in the right sidebar of the change list
1363
 
page of the admin. This should be a list of field names, and each specified
1364
 
field should be either a ``BooleanField``, ``DateField``, ``DateTimeField``
1365
 
or ``ForeignKey``.
1366
 
 
1367
 
This example, taken from the ``django.contrib.auth.models.User`` model, shows
1368
 
how both ``list_display`` and ``list_filter`` work::
1369
 
 
1370
 
    class Admin:
1371
 
        list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
1372
 
        list_filter = ('is_staff', 'is_superuser')
1373
 
 
1374
 
The above code results in an admin change list page that looks like this:
1375
 
 
1376
 
    .. image:: http://media.djangoproject.com/img/doc/users_changelist.png
1377
 
 
1378
 
(This example also has ``search_fields`` defined. See below.)
1379
 
 
1380
 
``list_per_page``
1381
 
-----------------
1382
 
 
1383
 
Set ``list_per_page`` to control how many items appear on each paginated admin
1384
 
change list page. By default, this is set to ``100``.
1385
 
 
1386
 
``list_select_related``
1387
 
-----------------------
1388
 
 
1389
 
Set ``list_select_related`` to tell Django to use ``select_related()`` in
1390
 
retrieving the list of objects on the admin change list page. This can save you
1391
 
a bunch of database queries.
1392
 
 
1393
 
The value should be either ``True`` or ``False``. Default is ``False``.
1394
 
 
1395
 
Note that Django will use ``select_related()``, regardless of this setting,
1396
 
if one of the ``list_display`` fields is a ``ForeignKey``.
1397
 
 
1398
 
For more on ``select_related()``, see `the select_related() docs`_.
1399
 
 
1400
 
.. _the select_related() docs: http://www.djangoproject.com/documentation/db_api/#select-related
1401
 
 
1402
 
``ordering``
1403
 
------------
1404
 
 
1405
 
Set ``ordering`` to specify how objects on the admin change list page should be
1406
 
ordered. This should be a list or tuple in the same format as a model's
1407
 
``ordering`` parameter.
1408
 
 
1409
 
If this isn't provided, the Django admin will use the model's default ordering.
1410
 
 
1411
 
``save_as``
1412
 
-----------
1413
 
 
1414
 
Set ``save_as`` to enable a "save as" feature on admin change forms.
1415
 
 
1416
 
Normally, objects have three save options: "Save", "Save and continue editing"
1417
 
and "Save and add another". If ``save_as`` is ``True``, "Save and add another"
1418
 
will be replaced by a "Save as" button.
1419
 
 
1420
 
"Save as" means the object will be saved as a new object (with a new ID),
1421
 
rather than the old object.
1422
 
 
1423
 
By default, ``save_as`` is set to ``False``.
1424
 
 
1425
 
``save_on_top``
1426
 
---------------
1427
 
 
1428
 
Set ``save_on_top`` to add save buttons across the top of your admin change
1429
 
forms.
1430
 
 
1431
 
Normally, the save buttons appear only at the bottom of the forms. If you set
1432
 
``save_on_top``, the buttons will appear both on the top and the bottom.
1433
 
 
1434
 
By default, ``save_on_top`` is set to ``False``.
1435
 
 
1436
 
``search_fields``
1437
 
-----------------
1438
 
 
1439
 
Set ``search_fields`` to enable a search box on the admin change list page.
1440
 
This should be set to a list of field names that will be searched whenever
1441
 
somebody submits a search query in that text box.
1442
 
 
1443
 
These fields should be some kind of text field, such as ``CharField`` or
1444
 
``TextField``. You can also perform a related lookup on a ``ForeignKey`` with
1445
 
the lookup API "follow" notation::
1446
 
 
1447
 
    search_fields = ['foreign_key__related_fieldname']
1448
 
 
1449
 
When somebody does a search in the admin search box, Django splits the search
1450
 
query into words and returns all objects that contain each of the words, case
1451
 
insensitive, where each word must be in at least one of ``search_fields``. For
1452
 
example, if ``search_fields`` is set to ``['first_name', 'last_name']`` and a
1453
 
user searches for ``john lennon``, Django will do the equivalent of this SQL
1454
 
``WHERE`` clause::
1455
 
 
1456
 
    WHERE (first_name ILIKE '%john%' OR last_name ILIKE '%john%')
1457
 
    AND (first_name ILIKE '%lennon%' OR last_name ILIKE '%lennon%')
1458
 
 
1459
 
For faster and/or more restrictive searches, prefix the field name
1460
 
with an operator:
1461
 
 
1462
 
``^``
1463
 
    Matches the beginning of the field. For example, if ``search_fields`` is
1464
 
    set to ``['^first_name', '^last_name']`` and a user searches for
1465
 
    ``john lennon``, Django will do the equivalent of this SQL ``WHERE``
1466
 
    clause::
1467
 
 
1468
 
        WHERE (first_name ILIKE 'john%' OR last_name ILIKE 'john%')
1469
 
        AND (first_name ILIKE 'lennon%' OR last_name ILIKE 'lennon%')
1470
 
 
1471
 
    This query is more efficient than the normal ``'%john%'`` query, because
1472
 
    the database only needs to check the beginning of a column's data, rather
1473
 
    than seeking through the entire column's data. Plus, if the column has an
1474
 
    index on it, some databases may be able to use the index for this query,
1475
 
    even though it's a ``LIKE`` query.
1476
 
 
1477
 
``=``
1478
 
    Matches exactly, case-insensitive. For example, if
1479
 
    ``search_fields`` is set to ``['=first_name', '=last_name']`` and
1480
 
    a user searches for ``john lennon``, Django will do the equivalent
1481
 
    of this SQL ``WHERE`` clause::
1482
 
 
1483
 
        WHERE (first_name ILIKE 'john' OR last_name ILIKE 'john')
1484
 
        AND (first_name ILIKE 'lennon' OR last_name ILIKE 'lennon')
1485
 
 
1486
 
    Note that the query input is split by spaces, so, following this example,
1487
 
    it's not currently not possible to search for all records in which
1488
 
    ``first_name`` is exactly ``'john winston'`` (containing a space).
1489
 
 
1490
 
``@``
1491
 
    Performs a full-text match. This is like the default search method but uses
1492
 
    an index. Currently this is only available for MySQL.
1493
 
 
1494
 
Managers
1495
 
========
1496
 
 
1497
 
A ``Manager`` is the interface through which database query operations are
1498
 
provided to Django models. At least one ``Manager`` exists for every model in
1499
 
a Django application.
1500
 
 
1501
 
The way ``Manager`` classes work is documented in the `Retrieving objects`_
1502
 
section of the database API docs, but this section specifically touches on
1503
 
model options that customize ``Manager`` behavior.
1504
 
 
1505
 
.. _Retrieving objects: http://www.djangoproject.com/documentation/db_api/#retrieving-objects
1506
 
 
1507
 
Manager names
1508
 
-------------
1509
 
 
1510
 
By default, Django adds a ``Manager`` with the name ``objects`` to every Django
1511
 
model class. However, if you want to use ``objects`` as a field name, or if you
1512
 
want to use a name other than ``objects`` for the ``Manager``, you can rename
1513
 
it on a per-model basis. To rename the ``Manager`` for a given class, define a
1514
 
class attribute of type ``models.Manager()`` on that model. For example::
1515
 
 
1516
 
    from django.db import models
1517
 
 
1518
 
    class Person(models.Model):
1519
 
        #...
1520
 
        people = models.Manager()
1521
 
 
1522
 
Using this example model, ``Person.objects`` will generate an
1523
 
``AttributeError`` exception, but ``Person.people.all()`` will provide a list
1524
 
of all ``Person`` objects.
1525
 
 
1526
 
Custom Managers
1527
 
---------------
1528
 
 
1529
 
You can use a custom ``Manager`` in a particular model by extending the base
1530
 
``Manager`` class and instantiating your custom ``Manager`` in your model.
1531
 
 
1532
 
There are two reasons you might want to customize a ``Manager``: to add extra
1533
 
``Manager`` methods, and/or to modify the initial ``QuerySet`` the ``Manager``
1534
 
returns.
1535
 
 
1536
 
Adding extra Manager methods
1537
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1538
 
 
1539
 
Adding extra ``Manager`` methods is the preferred way to add "table-level"
1540
 
functionality to your models. (For "row-level" functionality -- i.e., functions
1541
 
that act on a single instance of a model object -- use _`Model methods`, not
1542
 
custom ``Manager`` methods.)
1543
 
 
1544
 
A custom ``Manager`` method can return anything you want. It doesn't have to
1545
 
return a ``QuerySet``.
1546
 
 
1547
 
For example, this custom ``Manager`` offers a method ``with_counts()``, which
1548
 
returns a list of all ``OpinionPoll`` objects, each with an extra
1549
 
``num_responses`` attribute that is the result of an aggregate query::
1550
 
 
1551
 
    class PollManager(models.Manager):
1552
 
        def with_counts(self):
1553
 
            from django.db import connection
1554
 
            cursor = connection.cursor()
1555
 
            cursor.execute("""
1556
 
                SELECT p.id, p.question, p.poll_date, COUNT(*)
1557
 
                FROM polls_opinionpoll p, polls_response r
1558
 
                WHERE p.id = r.poll_id
1559
 
                GROUP BY 1, 2, 3
1560
 
                ORDER BY 3 DESC""")
1561
 
            result_list = []
1562
 
            for row in cursor.fetchall():
1563
 
                p = self.model(id=row[0], question=row[1], poll_date=row[2])
1564
 
                p.num_responses = row[3]
1565
 
                result_list.append(p)
1566
 
            return result_list
1567
 
 
1568
 
    class OpinionPoll(models.Model):
1569
 
        question = models.CharField(maxlength=200)
1570
 
        poll_date = models.DateField()
1571
 
        objects = PollManager()
1572
 
 
1573
 
    class Response(models.Model):
1574
 
        poll = models.ForeignKey(Poll)
1575
 
        person_name = models.CharField(maxlength=50)
1576
 
        response = models.TextField()
1577
 
 
1578
 
With this example, you'd use ``OpinionPoll.objects.with_counts()`` to return
1579
 
that list of ``OpinionPoll`` objects with ``num_responses`` attributes.
1580
 
 
1581
 
Another thing to note about this example is that ``Manager`` methods can
1582
 
access ``self.model`` to get the model class to which they're attached.
1583
 
 
1584
 
Modifying initial Manager QuerySets
1585
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1586
 
 
1587
 
A ``Manager``'s base ``QuerySet`` returns all objects in the system. For
1588
 
example, using this model::
1589
 
 
1590
 
    class Book(models.Model):
1591
 
        title = models.CharField(maxlength=100)
1592
 
        author = models.CharField(maxlength=50)
1593
 
 
1594
 
...the statement ``Book.objects.all()`` will return all books in the database.
1595
 
 
1596
 
You can override a ``Manager``\'s base ``QuerySet`` by overriding the
1597
 
``Manager.get_query_set()`` method. ``get_query_set()`` should return a
1598
 
``QuerySet`` with the properties you require.
1599
 
 
1600
 
For example, the following model has *two* ``Manager``\s -- one that returns
1601
 
all objects, and one that returns only the books by Roald Dahl::
1602
 
 
1603
 
    # First, define the Manager subclass.
1604
 
    class DahlBookManager(models.Manager):
1605
 
        def get_query_set(self):
1606
 
            return super(DahlBookManager, self).get_query_set().filter(author='Roald Dahl')
1607
 
 
1608
 
    # Then hook it into the Book model explicitly.
1609
 
    class Book(models.Model):
1610
 
        title = models.CharField(maxlength=100)
1611
 
        author = models.CharField(maxlength=50)
1612
 
 
1613
 
        objects = models.Manager() # The default manager.
1614
 
        dahl_objects = DahlBookManager() # The Dahl-specific manager.
1615
 
 
1616
 
With this sample model, ``Book.objects.all()`` will return all books in the
1617
 
database, but ``Book.dahl_objects.all()`` will only return the ones written by
1618
 
Roald Dahl.
1619
 
 
1620
 
Of course, because ``get_query_set()`` returns a ``QuerySet`` object, you can
1621
 
use ``filter()``, ``exclude()`` and all the other ``QuerySet`` methods on it.
1622
 
So these statements are all legal::
1623
 
 
1624
 
    Book.dahl_objects.all()
1625
 
    Book.dahl_objects.filter(title='Matilda')
1626
 
    Book.dahl_objects.count()
1627
 
 
1628
 
This example also pointed out another interesting technique: using multiple
1629
 
managers on the same model. You can attach as many ``Manager()`` instances to
1630
 
a model as you'd like. This is an easy way to define common "filters" for your
1631
 
models.
1632
 
 
1633
 
For example::
1634
 
 
1635
 
    class MaleManager(models.Manager):
1636
 
        def get_query_set(self):
1637
 
            return super(MaleManager, self).get_query_set().filter(sex='M')
1638
 
 
1639
 
    class FemaleManager(models.Manager):
1640
 
        def get_query_set(self):
1641
 
            return super(FemaleManager, self).get_query_set().filter(sex='F')
1642
 
 
1643
 
    class Person(models.Model):
1644
 
        first_name = models.CharField(maxlength=50)
1645
 
        last_name = models.CharField(maxlength=50)
1646
 
        sex = models.CharField(maxlength=1, choices=(('M', 'Male'), ('F', 'Female')))
1647
 
        people = models.Manager()
1648
 
        men = MaleManager()
1649
 
        women = FemaleManager()
1650
 
 
1651
 
This example allows you to request ``Person.men.all()``, ``Person.women.all()``,
1652
 
and ``Person.people.all()``, yielding predictable results.
1653
 
 
1654
 
If you use custom ``Manager`` objects, take note that the first ``Manager``
1655
 
Django encounters (in order by which they're defined in the model) has a
1656
 
special status. Django interprets the first ``Manager`` defined in a class as
1657
 
the "default" ``Manager``. Certain operations -- such as Django's admin site --
1658
 
use the default ``Manager`` to obtain lists of objects, so it's generally a
1659
 
good idea for the first ``Manager`` to be relatively unfiltered. In the last
1660
 
example, the ``people`` ``Manager`` is defined first -- so it's the default
1661
 
``Manager``.
1662
 
 
1663
 
Model methods
1664
 
=============
1665
 
 
1666
 
Define custom methods on a model to add custom "row-level" functionality to
1667
 
your objects. Whereas ``Manager`` methods are intended to do "table-wide"
1668
 
things, model methods should act on a particular model instance.
1669
 
 
1670
 
This is a valuable technique for keeping business logic in one place -- the
1671
 
model.
1672
 
 
1673
 
For example, this model has a few custom methods::
1674
 
 
1675
 
    class Person(models.Model):
1676
 
        first_name = models.CharField(maxlength=50)
1677
 
        last_name = models.CharField(maxlength=50)
1678
 
        birth_date = models.DateField()
1679
 
        address = models.CharField(maxlength=100)
1680
 
        city = models.CharField(maxlength=50)
1681
 
        state = models.USStateField() # Yes, this is America-centric...
1682
 
 
1683
 
        def baby_boomer_status(self):
1684
 
            "Returns the person's baby-boomer status."
1685
 
            import datetime
1686
 
            if datetime.date(1945, 8, 1) <= self.birth_date <= datetime.date(1964, 12, 31):
1687
 
                return "Baby boomer"
1688
 
            if self.birth_date < datetime.date(1945, 8, 1):
1689
 
                return "Pre-boomer"
1690
 
            return "Post-boomer"
1691
 
 
1692
 
        def is_midwestern(self):
1693
 
            "Returns True if this person is from the Midwest."
1694
 
            return self.state in ('IL', 'WI', 'MI', 'IN', 'OH', 'IA', 'MO')
1695
 
 
1696
 
        def _get_full_name(self):
1697
 
            "Returns the person's full name."
1698
 
            return '%s %s' % (self.first_name, self.last_name)
1699
 
        full_name = property(_get_full_name)
1700
 
 
1701
 
The last method in this example is a *property*. `Read more about properties`_.
1702
 
 
1703
 
.. _Read more about properties: http://www.python.org/download/releases/2.2/descrintro/#property
1704
 
 
1705
 
A few object methods have special meaning:
1706
 
 
1707
 
``__str__``
1708
 
-----------
1709
 
 
1710
 
``__str__()`` is a Python "magic method" that defines what should be returned
1711
 
if you call ``str()`` on the object. Django uses ``str(obj)`` in a number of
1712
 
places, most notably as the value displayed to render an object in the Django
1713
 
admin site and as the value inserted into a template when it displays an
1714
 
object. Thus, you should always return a nice, human-readable string for the
1715
 
object's ``__str__``. Although this isn't required, it's strongly encouraged.
1716
 
 
1717
 
For example::
1718
 
 
1719
 
    class Person(models.Model):
1720
 
        first_name = models.CharField(maxlength=50)
1721
 
        last_name = models.CharField(maxlength=50)
1722
 
 
1723
 
        def __str__(self):
1724
 
            return '%s %s' % (self.first_name, self.last_name)
1725
 
 
1726
 
``get_absolute_url``
1727
 
--------------------
1728
 
 
1729
 
Define a ``get_absolute_url()`` method to tell Django how to calculate the
1730
 
URL for an object. For example::
1731
 
 
1732
 
    def get_absolute_url(self):
1733
 
        return "/people/%i/" % self.id
1734
 
 
1735
 
Django uses this in its admin interface. If an object defines
1736
 
``get_absolute_url()``, the object-editing page will have a "View on site"
1737
 
link that will jump you directly to the object's public view, according to
1738
 
``get_absolute_url()``.
1739
 
 
1740
 
Also, a couple of other bits of Django, such as the syndication-feed framework,
1741
 
use ``get_absolute_url()`` as a convenience to reward people who've defined the
1742
 
method.
1743
 
 
1744
 
It's good practice to use ``get_absolute_url()`` in templates, instead of
1745
 
hard-coding your objects' URLs. For example, this template code is bad::
1746
 
 
1747
 
    <a href="/people/{{ object.id }}/">{{ object.name }}</a>
1748
 
 
1749
 
But this template code is good::
1750
 
 
1751
 
    <a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
1752
 
 
1753
 
The ``permalink`` decorator
1754
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~
1755
 
 
1756
 
The problem with the way we wrote ``get_absolute_url()`` above is that it
1757
 
slightly violates the DRY principle: the URL for this object is defined both
1758
 
in the URLConf file and in the model.
1759
 
 
1760
 
You can further decouple your models from the URLconf using the ``permalink``
1761
 
decorator. This decorator is passed the view function and any parameters you
1762
 
would use for accessing this instance directly. Django then works out the
1763
 
correct full URL path using the URLconf. For example::
1764
 
 
1765
 
    from django.db.models import permalink
1766
 
 
1767
 
    def get_absolute_url(self):
1768
 
        return ('people.views.details', str(self.id))
1769
 
    get_absolute_url = permalink(get_absolute_url)
1770
 
 
1771
 
In this way, you're tying the model's absolute URL to the view that is used
1772
 
to display it, without repeating the URL information anywhere. You can still
1773
 
use the ``get_absolute_url`` method in templates, as before.
1774
 
 
1775
 
Executing custom SQL
1776
 
--------------------
1777
 
 
1778
 
Feel free to write custom SQL statements in custom model methods and
1779
 
module-level methods. The object ``django.db.connection`` represents the
1780
 
current database connection. To use it, call ``connection.cursor()`` to get a
1781
 
cursor object. Then, call ``cursor.execute(sql, [params])`` to execute the SQL
1782
 
and ``cursor.fetchone()`` or ``cursor.fetchall()`` to return the resulting
1783
 
rows. Example::
1784
 
 
1785
 
    def my_custom_sql(self):
1786
 
        from django.db import connection
1787
 
        cursor = connection.cursor()
1788
 
        cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
1789
 
        row = cursor.fetchone()
1790
 
        return row
1791
 
 
1792
 
``connection`` and ``cursor`` simply use the standard `Python DB-API`_. If
1793
 
you're not familiar with the Python DB-API, note that the SQL statement in
1794
 
``cursor.execute()`` uses placeholders, ``"%s"``, rather than adding parameters
1795
 
directly within the SQL. If you use this technique, the underlying database
1796
 
library will automatically add quotes and escaping to your parameter(s) as
1797
 
necessary. (Also note that Django expects the ``"%s"`` placeholder, *not* the
1798
 
``"?"`` placeholder, which is used by the SQLite Python bindings. This is for
1799
 
the sake of consistency and sanity.)
1800
 
 
1801
 
A final note: If all you want to do is a custom ``WHERE`` clause, you can just
1802
 
just the ``where``, ``tables`` and ``params`` arguments to the standard lookup
1803
 
API. See `Other lookup options`_.
1804
 
 
1805
 
.. _Python DB-API: http://www.python.org/peps/pep-0249.html
1806
 
.. _Other lookup options: http://www.djangoproject.com/documentation/db_api/#extra-params-select-where-tables
1807
 
 
1808
 
Overriding default model methods
1809
 
--------------------------------
1810
 
 
1811
 
As explained in the `database API docs`_, each model gets a few methods
1812
 
automatically -- most notably, ``save()`` and ``delete()``. You can override
1813
 
these methods to alter behavior.
1814
 
 
1815
 
A classic use-case for overriding the built-in methods is if you want something
1816
 
to happen whenever you save an object. For example::
1817
 
 
1818
 
    class Blog(models.Model):
1819
 
        name = models.CharField(maxlength=100)
1820
 
        tagline = models.TextField()
1821
 
 
1822
 
        def save(self):
1823
 
            do_something()
1824
 
            super(Blog, self).save() # Call the "real" save() method.
1825
 
            do_something_else()
1826
 
 
1827
 
You can also prevent saving::
1828
 
 
1829
 
    class Blog(models.Model):
1830
 
        name = models.CharField(maxlength=100)
1831
 
        tagline = models.TextField()
1832
 
 
1833
 
        def save(self):
1834
 
            if self.name == "Yoko Ono's blog":
1835
 
                return # Yoko shall never have her own blog!
1836
 
            else:
1837
 
                super(Blog, self).save() # Call the "real" save() method.
1838
 
 
1839
 
.. _database API docs: http://www.djangoproject.com/documentation/db_api/
1840
 
 
1841
 
Models across files
1842
 
===================
1843
 
 
1844
 
It's perfectly OK to relate a model to one from another app. To do this, just
1845
 
import the related model at the top of the model that holds your model. Then,
1846
 
just refer to the other model class wherever needed. For example::
1847
 
 
1848
 
    from mysite.geography.models import ZipCode
1849
 
 
1850
 
    class Restaurant(models.Model):
1851
 
        # ...
1852
 
        zip_code = models.ForeignKey(ZipCode)
1853
 
 
1854
 
Using models
1855
 
============
1856
 
 
1857
 
Once you have created your models, the final step is to tell Django you're
1858
 
going to *use* those models.
1859
 
 
1860
 
Do this by editing your settings file and changing the ``INSTALLED_APPS``
1861
 
setting to add the name of the module that contains your ``models.py``.
1862
 
 
1863
 
For example, if the models for your application live in the module
1864
 
``mysite.myapp.models`` (the package structure that is created for an
1865
 
application by the ``manage.py startapp`` script), ``INSTALLED_APPS`` should
1866
 
read, in part::
1867
 
 
1868
 
    INSTALLED_APPS = (
1869
 
        #...
1870
 
        'mysite.myapp',
1871
 
        #...
1872
 
    )
1873
 
 
1874
 
Providing initial SQL data
1875
 
==========================
1876
 
 
1877
 
Django provides a hook for passing the database arbitrary SQL that's executed
1878
 
just after the CREATE TABLE statements. Use this hook, for example, if you want
1879
 
to populate default records, or create SQL functions, automatically.
1880
 
 
1881
 
The hook is simple: Django just looks for a file called
1882
 
``<appname>/sql/<modelname>.sql``, where ``<appname>`` is your app directory and
1883
 
``<modelname>`` is the model's name in lowercase.
1884
 
 
1885
 
In the ``Person`` example model at the top of this document, assuming it lives
1886
 
in an app called ``myapp``, you could add arbitrary SQL to the file
1887
 
``myapp/sql/person.sql``. Here's an example of what the file might contain::
1888
 
 
1889
 
    INSERT INTO myapp_person (first_name, last_name) VALUES ('John', 'Lennon');
1890
 
    INSERT INTO myapp_person (first_name, last_name) VALUES ('Paul', 'McCartney');
1891
 
 
1892
 
Each SQL file, if given, is expected to contain valid SQL. The SQL files are
1893
 
piped directly into the database after all of the models' table-creation
1894
 
statements have been executed.
1895
 
 
1896
 
The SQL files are read by the ``sqlinitialdata``, ``sqlreset``, ``sqlall`` and
1897
 
``reset`` commands in ``manage.py``. Refer to the `manage.py documentation`_
1898
 
for more information.
1899
 
 
1900
 
Note that if you have multiple SQL data files, there's no guarantee of the
1901
 
order in which they're executed. The only thing you can assume is that, by the
1902
 
time your custom data files are executed, all the database tables already will
1903
 
have been created.
1904
 
 
1905
 
.. _`manage.py documentation`: http://www.djangoproject.com/documentation/django_admin/#sqlinitialdata-appname-appname
1906
 
 
1907
 
Database-backend-specific SQL data
1908
 
----------------------------------
1909
 
 
1910
 
There's also a hook for backend-specific SQL data. For example, you can have
1911
 
separate initial-data files for PostgreSQL and MySQL. For each app, Django
1912
 
looks for a file called ``<appname>/sql/<modelname>.<backend>.sql``, where
1913
 
``<appname>`` is your app directory, ``<modelname>`` is the model's name in
1914
 
lowercase and ``<backend>`` is the value of ``DATABASE_ENGINE`` in your
1915
 
settings file (e.g., ``postgresql``, ``mysql``).
1916
 
 
1917
 
Backend-specific SQL data is executed before non-backend-specific SQL data. For
1918
 
example, if your app contains the files ``sql/person.sql`` and
1919
 
``sql/person.postgresql.sql`` and you're installing the app on PostgreSQL,
1920
 
Django will execute the contents of ``sql/person.postgresql.sql`` first, then
1921
 
``sql/person.sql``.