Personalizando a chave primária no Django ORM \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 10 Horas 

 40 Min 

 26 Seg 

   Tempo restante da oferta: 10 40 26 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Personalizando a chave primária no Django ORM  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) [ Django ](https://www.treinaweb.com.br/blog/categoria/django) 

# Personalizando a chave primária no Django ORM

 Veja neste artigo como personalizar a chave primária no Django ORM.

 [ Fagner Pinheiro ](https://www.treinaweb.com.br/blog/autor/fagner-pinheiro) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/23115642/CHAVE-PRIMÁRIA-DJANGO.png)  

Por padrão, o ORM do Django cria, para cada tabela, um campo chamado `id` e é ele quem identifica, unicamente, os registros no banco de dados. Porém, muitas vezes, precisamos que este campo possua outro nome (ou até outro tipo)… E é isso que veremos neste artigo.

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/10/E-BOOK-GRATUITO-PYTHON.jpg) ](https://www.treinaweb.com.br/ebook/guia-python/)

### Alterando nome e tipo da chave primária no Django ORM

Como exemplo para este artigo, vamos utilizar um `model` simples, com apenas alguns campos, conforme podemos ver abaixo:

```python
class Pessoa(models.Model):
    nome = models.CharField(max_length=40, null=False, blank=False)
    email = models.EmailField(null=False, blank=False)

    def __str__(self):
        return self.nome

```

Ao realizar a migração, a seguinte estrutura será criada no banco de dados:

![](https://dkrn4sk0rn31v.cloudfront.net/2019/07/22163929/image-20190722161525564.png)

Podemos notar que, apesar de não definir nenhum campo com o nome `id`, o Django o criou automaticamente. Por padrão, este campo é do tipo `int(11)`, não permite dados nulos e é utilizado para armazenar a chave primária da tabela. Porém, caso necessário, podemos alterar a estrutura deste campo facilmente utilizando o Django.

Para isso, a única coisa que precisamos fazer é criar um campo que será utilizado como `primary_key` no `model` do nosso projeto, como podemos ver abaixo:

```python
class Pessoa(models.Model):
    id_personalizado = models.CharField(max_length=20, primary_key=True)
    nome = models.CharField(max_length=40, null=False, blank=False)
    email = models.EmailField(null=False, blank=False)

    def __str__(self):
        return self.nome

```

Sendo assim, podemos notar que a única coisa necessária para alterar a chave primária de uma tabela é determinar o atributo `primary_key=True` e, com isso, este campo será utilizado como chave primária no banco de dados:

![](https://dkrn4sk0rn31v.cloudfront.net/2019/07/22163937/image-20190722162458300.png)

### Concluindo

Apesar de possuir diversas configurações padrões, o ORM do Django permite a personalização de várias delas. Neste artigo vimos o quão simples é alterar o nome da chave primária de um determinado `model`.

- [ #MySQL ](https://www.treinaweb.com.br/blog/tag/mysql)
- [ #Python ](https://www.treinaweb.com.br/blog/tag/python)
- [ #Django ](https://www.treinaweb.com.br/blog/tag/django)
- [ #django orm ](https://www.treinaweb.com.br/blog/tag/django-orm)

Autor

 ![Fagner Pinheiro](//secure.gravatar.com/avatar/e622f7c7d686a0b11f8d977ce9725b67?d=mm)

## Fagner Pinheiro

 Professor na TreinaWeb e graduado em Sistemas de Informação pelo Instituto Federal da Bahia. Apaixonado por desenvolvimento web, desktop e mobile desde os 12 anos de idade. Já utilizou todos os sistemas operacionais possíveis, mas hoje se contenta com o OSX instalado em seu desktop. Quando não está trabalhando, é IGL e Awper do time de CS:GO da Treinaweb. Até passou em uma peneira do Cruzeiro, mas preferiu estudar Python. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/fagner-pinheiro)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/03/11153540/DJANGO-ADMIN-400x280.png)  [ Bancos de Dados ](https://www.treinaweb.com.br/blog/categoria/bancos-de-dados) 

     7 anos atrás

    ##  [ Principais aplicações para gerenciamento de banco de dados com interface gráfica ](https://www.treinaweb.com.br/blog/principais-aplicacoes-para-gerenciamento-de-banco-de-dados-com-interface-grafica) 

     Veja neste artigo as principais aplicações para gerenciamento de banco de dados com interface gráfica.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/como-instalar-o-java-e-nosso-primeiro-exemplo-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Conheça o recurso de Records no Java ](https://www.treinaweb.com.br/blog/conheca-o-recurso-de-records-no-java) 

     Neste artigo, vamos aprender sobre o recurso de Records no Java. Veremos como utilizar esse recurso, suas vantagens e desvantagens.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/iterators-php-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Generators no PHP ](https://www.treinaweb.com.br/blog/generators-no-php) 

     Saiba o que são Iterators e Generators, bem como os seus casos de uso.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/10/15020508/rsz_bridge-246913_1920-400x280.png)  [ Orientação a Objetos ](https://www.treinaweb.com.br/blog/categoria/orientacao-a-objetos) 

     8 anos atrás

    ##  [ Os pilares da orientação a objetos ](https://www.treinaweb.com.br/blog/os-pilares-da-orientacao-a-objetos) 

     O paradigma orientado a objetos é um dos mais utilizados no mercado de trabalho. Neste artigo, veremos os pilares da orientação a objetos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/09/10155418/recipes-symfony-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Como criar recipes do Symfony Flex e enviar para o repositório ](https://www.treinaweb.com.br/blog/como-criar-recipes-do-symfony-flex-e-enviar-para-o-repositorio) 

     Aprenda a criar recipes do Symfony Flex personalizados para automatizar as configurações de bundles. Além disso, o post também mostra como enviar o recipe para o repositório e testar na prática.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Orientação a objetos na linguagem Go ](https://www.treinaweb.com.br/blog/orientacao-a-objetos-na-linguagem-go) 

     Neste artigo iremos aprender como podemos utilizar a orientação a objetos na linguagem Go, usando structs e pointer receivers.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/03/26181326/CAPA-ELTON-MARÇO-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Como melhorar o retorno das suas APIs no Laravel com API Resource do Eloquent ](https://www.treinaweb.com.br/blog/como-melhorar-o-retorno-das-suas-apis-no-laravel-com-api-resource-do-eloquent) 

     Um dos pontos mais importantes quando estamos trabalhando APIs é o retorno dos dados. Veja como melhorar suas APIs no Laravel usando o API Resouce do Eloquent.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/11/25224114/REDHAT-OPENSHIFT-400x280.png)  [ DevOps ](https://www.treinaweb.com.br/blog/categoria/devops) 

     8 anos atrás

    ##  [ O que é o OpenShift? ](https://www.treinaweb.com.br/blog/o-que-e-o-openshift) 

     Conheça mais sobre o OpenShift e como ele funciona.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/busca-laravel-scout-algolia-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ Full Text Search com Laravel, Scout e Algolia ](https://www.treinaweb.com.br/blog/full-text-search-com-laravel-scout-e-algolia) 

     Aprenda como realizar buscas textuais rápidas e eficientes independentemente da quantidade de registros, campos ou tamanhos de textos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/10121011/GITHUB-DOMINIOS-PERSONALIZADOS-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ Como usar domínio personalizado no Github Pages ](https://www.treinaweb.com.br/blog/como-usar-dominio-personalizado-no-github-pages) 

     Veremos nesse artigo como usar um domínio personalizado em um site do Github Pages de forma simples e gratuita.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/24120107/streams-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Stream Wrappers personalizados no PHP ](https://www.treinaweb.com.br/blog/stream-wrappers-personalizados-no-php) 

     Veja como Stream Wrappers personalizados podem ser criados em PHP para se trabalhar com streams usando as funções nativas da linguagem. A SDK para PHP da AWS e do Google Cloud utilizam, bem como outros serviços.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/08/Como-alterar-o-font-family-do-site-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     3 anos atrás

    ##  [ Como alterar o font family do site ](https://www.treinaweb.com.br/blog/como-alterar-o-font-family-do-site) 

     Nesse artigo veremos como você pode alterar o font family de seu site. Aprenderemos também as diferentes possibilidades de fazê-lo.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **10h 40min 26s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
