.. .. META INFORMATION OF TRANSLATION .. .. $TranslationStatus: Done, waiting for revision. $ .. $OriginalRevision: 11268 $ .. $TranslationAuthors: Walter Cruz, Robson Mendonça $ .. .. INFO OF THIS FILE (DO NOT EDIT! UPDATED BY SUBVERSION) .. .. $HeadURL$ .. $LastChangedRevision$ .. $LastChangedBy$ .. $LastChangedDate$ .. ====== Models ====== .. module:: django.db.models Um modelo é a fonte única e definitiva de dados sobre os seus dados. Ele contém os campos e comportamentos essenciais dos dados que você está gravando. Geralmente, cada modelo mapeia para uma única tabela no banco de dados. O básico: * Cada modelo é uma classe Python que extende :class:`django.db.models.Model`. * Cada atributo do modelo representa uma coluna do banco de dados. * Com tudo isso, o Django lhe dá uma API de acesso a banco de dados gerada automaticamente, o que é explicado em :doc:`/topics/db/queries`. .. seealso:: Um companheiro para esse documento é o `repositório oficial de exemplos de modelo`_. (Na distribuição do fonte do Django, esses exemplos estão no diretório ``tests/modeltests``.) .. _repositório oficial de exemplos de modelo: http://www.djangoproject.com/documentation/models/ Exemplo rápido ============== Esse modelo de exemplo define uma ``Person``, que tem um ``first_name`` e um ``last_name``:: from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) ``first_name`` e ``last_name`` são *campos* do modelo. Cada campo é especificado como um atributo de classe, e cada atributo é mapeado para uma coluna no banco de dados. O modelo ``Person`` acima criaria uma tabela assim: .. code-block:: sql CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL ); Algumas notas técnicas: * O nome da tabela, ``myapp_person``, é automaticamente derivado de alguns metadados do modelo, no entanto isto pode ser sobrescrito. Veja :ref:`table-names` abaixo. * Um campo ``id`` é adicionado automaticamente, mas esse comportamento também pode ser alterado. Veja :ref:`automatic-primary-key-fields` abaixo. * O comando SQL ``CREATE TABLE`` nesse exemplo é formatado usando a sintaxe do PostgreSQL, mas é digno de nota que o Django usa o SQL adaptado ao banco de dados especificado no seu :doc:`arquivo de configurações `. Usando models ============== Uma vez que já tenha criado seus modelos, o passo final é dizer ao Django para usar estes modelos. Para isto, basta editar seu arquivo settings.py e mudar o :setting:`INSTALLED_APPS` adicionando o nome do módulo que contém seu ``models.py``. Por exemplo, se os modelos de sua aplicação ficam no módulo ``mysite.myapp.models`` (a estrutura de pacote que é criada para uma aplicação pelo script :djadmin:`manage.py startapp `), o :setting:`INSTALLED_APPS` deve ler, em parte:: INSTALLED_APPS = ( #... 'mysite.myapp', #... ) Quando você adicionar novas aplicações ao :setting:`INSTALLED_APPS`, assegure-se de rodar o :djadmin:`manage.py syncdb `. Campos ====== A parte mais importante do modelo -- e a única obrigatória -- é a lista de campos do banco de dados que ele define. Campos são especificados por meio de atributos de classe. Exemplo:: class Musician(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) instrument = models.CharField(max_length=100) class Album(models.Model): artist = models.ForeignKey(Musician) name = models.CharField(max_length=100) release_date = models.DateField() num_stars = models.IntegerField() Tipos de campos --------------- Cada campo no seu modelo deve ser uma instância da classe :class:`~django.db.models.Field` apropriada. O Django usa os tipos das classes para determinar algumas coisas: * O tipo de coluna no banco de dados (ex: ``INTEGER``, ``VARCHAR``). * O widget a ser usado na interface administrativa do Django, se você a utilizar (ex: ````, ``