{"payload":{"allShortcutsEnabled":false,"fileTree":{"docs":{"items":[{"name":"man","path":"docs/man","contentType":"directory"},{"name":"add_ons.txt","path":"docs/add_ons.txt","contentType":"file"},{"name":"admin_css.txt","path":"docs/admin_css.txt","contentType":"file"},{"name":"apache_auth.txt","path":"docs/apache_auth.txt","contentType":"file"},{"name":"api_stability.txt","path":"docs/api_stability.txt","contentType":"file"},{"name":"authentication.txt","path":"docs/authentication.txt","contentType":"file"},{"name":"cache.txt","path":"docs/cache.txt","contentType":"file"},{"name":"contributing.txt","path":"docs/contributing.txt","contentType":"file"},{"name":"csrf.txt","path":"docs/csrf.txt","contentType":"file"},{"name":"databases.txt","path":"docs/databases.txt","contentType":"file"},{"name":"databrowse.txt","path":"docs/databrowse.txt","contentType":"file"},{"name":"db-api.txt","path":"docs/db-api.txt","contentType":"file"},{"name":"design_philosophies.txt","path":"docs/design_philosophies.txt","contentType":"file"},{"name":"distributions.txt","path":"docs/distributions.txt","contentType":"file"},{"name":"django-admin.txt","path":"docs/django-admin.txt","contentType":"file"},{"name":"documentation.txt","path":"docs/documentation.txt","contentType":"file"},{"name":"email.txt","path":"docs/email.txt","contentType":"file"},{"name":"faq.txt","path":"docs/faq.txt","contentType":"file"},{"name":"fastcgi.txt","path":"docs/fastcgi.txt","contentType":"file"},{"name":"flatpages.txt","path":"docs/flatpages.txt","contentType":"file"},{"name":"forms.txt","path":"docs/forms.txt","contentType":"file"},{"name":"generic_views.txt","path":"docs/generic_views.txt","contentType":"file"},{"name":"i18n.txt","path":"docs/i18n.txt","contentType":"file"},{"name":"install.txt","path":"docs/install.txt","contentType":"file"},{"name":"legacy_databases.txt","path":"docs/legacy_databases.txt","contentType":"file"},{"name":"middleware.txt","path":"docs/middleware.txt","contentType":"file"},{"name":"model-api.txt","path":"docs/model-api.txt","contentType":"file"},{"name":"modpython.txt","path":"docs/modpython.txt","contentType":"file"},{"name":"newforms.txt","path":"docs/newforms.txt","contentType":"file"},{"name":"outputting_csv.txt","path":"docs/outputting_csv.txt","contentType":"file"},{"name":"outputting_pdf.txt","path":"docs/outputting_pdf.txt","contentType":"file"},{"name":"overview.txt","path":"docs/overview.txt","contentType":"file"},{"name":"redirects.txt","path":"docs/redirects.txt","contentType":"file"},{"name":"release_notes_0.95.txt","path":"docs/release_notes_0.95.txt","contentType":"file"},{"name":"release_notes_0.96.txt","path":"docs/release_notes_0.96.txt","contentType":"file"},{"name":"request_response.txt","path":"docs/request_response.txt","contentType":"file"},{"name":"serialization.txt","path":"docs/serialization.txt","contentType":"file"},{"name":"sessions.txt","path":"docs/sessions.txt","contentType":"file"},{"name":"settings.txt","path":"docs/settings.txt","contentType":"file"},{"name":"sitemaps.txt","path":"docs/sitemaps.txt","contentType":"file"},{"name":"sites.txt","path":"docs/sites.txt","contentType":"file"},{"name":"static_files.txt","path":"docs/static_files.txt","contentType":"file"},{"name":"syndication_feeds.txt","path":"docs/syndication_feeds.txt","contentType":"file"},{"name":"templates.txt","path":"docs/templates.txt","contentType":"file"},{"name":"templates_python.txt","path":"docs/templates_python.txt","contentType":"file"},{"name":"testing.txt","path":"docs/testing.txt","contentType":"file"},{"name":"transactions.txt","path":"docs/transactions.txt","contentType":"file"},{"name":"tutorial01.txt","path":"docs/tutorial01.txt","contentType":"file"},{"name":"tutorial02.txt","path":"docs/tutorial02.txt","contentType":"file"},{"name":"tutorial03.txt","path":"docs/tutorial03.txt","contentType":"file"},{"name":"tutorial04.txt","path":"docs/tutorial04.txt","contentType":"file"},{"name":"url_dispatch.txt","path":"docs/url_dispatch.txt","contentType":"file"},{"name":"webdesign.txt","path":"docs/webdesign.txt","contentType":"file"}],"totalCount":53},"":{"items":[{"name":"django","path":"django","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"examples","path":"examples","contentType":"directory"},{"name":"extras","path":"extras","contentType":"directory"},{"name":"scripts","path":"scripts","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":"AUTHORS","path":"AUTHORS","contentType":"file"},{"name":"INSTALL","path":"INSTALL","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"MANIFEST.in","path":"MANIFEST.in","contentType":"file"},{"name":"README","path":"README","contentType":"file"},{"name":"setup.cfg","path":"setup.cfg","contentType":"file"},{"name":"setup.py","path":"setup.py","contentType":"file"}],"totalCount":13}},"fileTreeProcessingTime":15.859794,"foldersToFetch":[],"repo":{"id":4164482,"defaultBranch":"main","name":"django","ownerLogin":"django","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2012-04-28T02:47:18.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/27804?v=4","public":true,"private":false,"isOrgOwned":true},"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"042d7e44fa5effd901cf1828d8f6f2058113cbc7","listCacheKey":"v0:1709542684.0","canEdit":false,"refType":"tree","currentOid":"042d7e44fa5effd901cf1828d8f6f2058113cbc7"},"path":"docs/model-api.txt","currentUser":null,"blob":{"rawLines":["===============","Model reference","===============","","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. Generally, each","model maps to a single database table.","","The basics:",""," * Each model is a Python class that subclasses ``django.db.models.Model``."," * Each attribute of the model represents a database field."," * Model metadata (non-field information) goes in an inner class named"," ``Meta``."," * Metadata used for Django's admin site goes into an inner class named"," ``Admin``."," * With all of this, Django gives you an automatically-generated"," database-access API, which is explained in the `Database API reference`_.","","A companion to this document is the `official repository of model examples`_.","(In the Django source distribution, these examples are in the","``tests/modeltests`` directory.)","",".. _Database API reference: ../db-api/",".. _official repository of model examples: http://www.djangoproject.com/documentation/models/","","Quick example","=============","","This example model defines a ``Person``, which has a ``first_name`` and","``last_name``::",""," from django.db import models",""," class Person(models.Model):"," first_name = models.CharField(maxlength=30)"," last_name = models.CharField(maxlength=30)","","``first_name`` and ``last_name`` are *fields* of the model. Each field is","specified as a class attribute, and each attribute maps to a database column.","","The above ``Person`` model would create a database table like this::",""," CREATE TABLE myapp_person ("," \"id\" serial NOT NULL PRIMARY KEY,"," \"first_name\" varchar(30) NOT NULL,"," \"last_name\" varchar(30) NOT NULL"," );","","Some technical notes:",""," * The name of the table, ``myapp_person``, is automatically derived from"," some model metadata but can be overridden. See _`Table names` below."," * An ``id`` field is added automatically, but this behavior can be"," overriden. See `Automatic primary key fields`_ below."," * The ``CREATE TABLE`` SQL in this example is formatted using PostgreSQL"," syntax, but it's worth noting Django uses SQL tailored to the database"," backend specified in your `settings file`_.","",".. _settings file: ../settings/","","Fields","======","","The most important part of a model -- and the only required part of a model --","is the list of database fields it defines. Fields are specified by class","attributes.","","Example::",""," class Musician(models.Model):"," first_name = models.CharField(maxlength=50)"," last_name = models.CharField(maxlength=50)"," instrument = models.CharField(maxlength=100)",""," class Album(models.Model):"," artist = models.ForeignKey(Musician)"," name = models.CharField(maxlength=100)"," release_date = models.DateField()"," num_stars = models.IntegerField()","","Field name restrictions","-----------------------","","Django places only two restrictions on model field names:",""," 1. A field name cannot be a Python reserved word, because that would result"," in a Python syntax error. For example::",""," class Example(models.Model):"," pass = models.IntegerField() # 'pass' is a reserved word!",""," 2. A field name cannot contain more than one underscore in a row, due to"," the way Django's query lookup syntax works. For example::",""," class Example(models.Model):"," foo__bar = models.IntegerField() # 'foo__bar' has two underscores!","","These limitations can be worked around, though, because your field name doesn't","necessarily have to match your database column name. See `db_column`_ below.","","SQL reserved words, such as ``join``, ``where`` or ``select``, *are* allowed as","model field names, because Django escapes all database table names and column","names in every underlying SQL query. It uses the quoting syntax of your","particular database engine.","","Field types","-----------","","Each field in your model should be an instance of the appropriate ``Field``","class. Django uses the field class types to determine a few things:",""," * The database column type (e.g. ``INTEGER``, ``VARCHAR``)."," * The widget to use in Django's admin interface, if you care to use it"," (e.g. ````, ``