| | 172 | Recuperando objetos |
| | 173 | =================== |
| | 174 | |
| | 175 | Para recuperar objetos de seu banco de dados, você constrói um ``QuerySet`` através de um ``Manager`` (gerente) em sua classe de modelo. |
| | 176 | |
| | 177 | Um ``QuerySet`` representa uma coleção dos objetos em seu banco de dados. Pode ter zero, um ou muitos *filtros* (filters) --critérios que reduzem, estreitam a coleção baseando-se em parâmetros fornecidos. Em termos SQL, um ``QuerySet`` equivale a uma declaração ``SELECT``, e um filtro uma cláusula condicional como ``WHERE`` ou ``LIMIT``. |
| | 178 | |
| | 179 | Você obtém um ``QuerySet`` usando o ``Manager`` dos seus modelos (models class). Cada modelo tem pelo menos um ``Manager``, e é chamado ``objects`` por padrão. Acesse-o diretamente através das classes modelos (models classes), dessa maneira:: |
| | 180 | |
| | 181 | Blog.objects # <django.db.models.manager.Manager object at ...> |
| | 182 | b = Blog(name='Foo', tagline='Bar') |
| | 183 | b.objects # AttributeError: "Manager isn't accessible via Blog instances." |
| | 184 | |
| | 185 | (``Managers`` são acessívei somente por via das classes modelos, e não pelas instâncias dos modelos, isto é para garantir a separação entre operações em níveis de tabelas ("table-level") das operações em níveis de registro ("record-level") ) |
| | 186 | |
| | 187 | O ``Manager`` é a principal fonte de ``QuerySets`` para um determinado modelo (model). Ele age como uma "raiz" das ``QuerySet`` que descrevem todos os objetos em tabelas de um determinado modelo no banco de dados. |
| | 188 | Por exemplo, ``Blog.objects`` é a ``QuerySet`` inicial que contém todos os objetos ``Blog`` no banco de dados. |
| | 189 | |
| | 190 | |
| | 191 | |
| | 192 | Recuperando todos objetos |
| | 193 | ------------------------- |
| | 194 | |
| | 195 | A maneira a mais simples de recuperar objetos de uma tabela é recuperá-los todos de uma vez.. Para fazer isto, use o método ``all()`` em um ``Manager``. |
| | 196 | |
| | 197 | Exemplo:: |
| | 198 | |
| | 199 | all_entries = Entry.objects.all() |
| | 200 | |
| | 201 | O método ``all()`` retorna um ``QuerySet`` de todos os objetos no banco de dados. |
| | 202 | |
| | 203 | (Já que ``Entry.objects`` é um ``QuerySet``, porque nós não podemos utilizar ``Entry.objects``? |
| | 204 | Isto ocorre porque ``Entry.objects``, que é a ``QuerySet`` raíz , é um caso especial que não pode ser avaliado. O método ``all()`` retorna um ``QuerySet`` que *pode* ser avaliado.) |
| | 205 | |
| | 206 | Filtrando objetos |
| | 207 | ----------------- |
| | 208 | |
| | 209 | A``QuerySet`` raíz que é fornecida pelo ``Manager`` descreve todos os objetos de um tabela no banco de dados. Embora usualmente, você tenha que escolher somente parte (subset) do completo conjunto de objetos |
| | 210 | |
| | 211 | Para criar tal parte do conjunto, você refina a ``QuerySet`` inicial, adicionando condições como filtros. As duas maneiras mais comuns para refinar um ``QuerySet`` são: |
| | 212 | |
| | 213 | ``filter(**kwargs)`` |
| | 214 | Retorna um novo``QuerySet`` contendo objetos que casam com o determinado parâmetro de busca |
| | 215 | |
| | 216 | ``exclude(**kwargs)`` |
| | 217 | Retorna um novo``QuerySet`` contendo objetos que *não* casam com o determinado parâmetro de busca |
| | 218 | |
| | 219 | Os parâmetros de busca (``**kwargs`` nas funções definidas acima) devem estar no format descrito abaixo em `Field lookups`_. |
| | 220 | |
| | 221 | .. _`Field lookups`: http://www.djangoproject.com/documentation/db_api/#field-lookups |
| | 222 | |
| | 223 | Por exemplo, para obter um ``QuerySet`` das entradas de um blog desde o ano de 2006, use ``filter()`` dessa forma:: |
| | 224 | |
| | 225 | Entry.objects.filter(pub_date__year=2006) |
| | 226 | |
| | 227 | (Note que não temos que adicionar um ``all()`` -- ``Entry.objects.all().filter(...)``. Isto também deve funcionar, porém você somente precisa usar ``all()`` quando você quiser todos os objetos da ``QuerySet`` raíz.) |
| | 228 | |
| | 229 | Filtros encadeados |
| | 230 | ------------------ |
| | 231 | |
| | 232 | O resultado do refinamento de uma ``QuerySet`` é também um ``QuerySet``, assim é possível encadear outros refinamentos. Por exemplo:: |
| | 233 | |
| | 234 | Entry.objects.filter( |
| | 235 | headline__startswith='What').exclude( |
| | 236 | pub_date__gte=datetime.now()).filter( |
| | 237 | pub_date__gte=datetime(2005, 1, 1)) |
| | 238 | |
| | 239 | ...observe o ``QuerySet`` inicial com todas entradas contidas no banco de dados, incluia um filtro, depois uma exclusão, e depois outro filtro. O resultado final é um ``QuerySet`` contendo todas as entradas que o cabeçalho (headline) começe com "What", que foram publicados entre 1 de janeiro de 2005 e a data atual. |
| | 240 | |
| | 241 | |