Relacionamento Many To Many no Django

Поділитися
Вставка
  • Опубліковано 19 січ 2025

КОМЕНТАРІ • 60

  • @fbaugusto
    @fbaugusto 2 роки тому +1

    Você é um ótimo professor! Obrigado pela aula top!

  • @HigorLP
    @HigorLP 4 роки тому +4

    Gostei bastante do seu canal Samuel, parabéns! . O Django é um framework excelente e muito produtivo que a galera não da tanta atenção. Fiquei feliz em encontrar seu canal! Espero que depois poste conteúdos mais avançados sobre o framework! 😀

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому

      E eu fico feliz de ter você aqui no canal.
      Pretendo postar muito conteúdo ainda.
      Inclusive, se você quiser sugerir tópicos para os vídeos, será muito bom.
      Abraço.

    • @HigorLP
      @HigorLP 4 роки тому +1

      @@SamuelGoncalvesPython encontrei o canal procurando por deploy aí encontrei seu vídeo do heroku. Quando você puder trazer vídeos de deploy em outras plataformas de hospedagem será muito bom, pois a maioria dos vídeos não estão em português ou não apresentam uma dinâmica de tão boa!
      Abraço!

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому +4

      Bem interessante. Gostei da ideia.
      Vou colocar alguns deploys na lista. Inclusive utilizando o Docker.

  • @fabiomarcilio9814
    @fabiomarcilio9814 2 роки тому +1

    Parabéns Samuel, conteúdo muito bom!

  • @magneto243
    @magneto243 Рік тому +1

    Bem explicado!

  • @wellingtondeoliveira8012
    @wellingtondeoliveira8012 2 роки тому

    Valeu!

  • @pedrowegner9167
    @pedrowegner9167 2 роки тому +1

    Muito interessante. A única coisa que acho meio complicada de pensar é a forma que utilizarei para exibir isso na página web. Por exemplo, mandar tanto o programador como as linguagens, junto do nível de conhecimento, para um código html para pode exibir na tela.

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  2 роки тому +1

      Fala camarada. É menos complicado do que parece.
      Imagina o seguinte: É uma lista de programadores. E cada programador tem uma lista de linguagens.
      Dito isso, basta vc fazer um "for" para os programadores e dentro dele outro "for" para as linguagens.
      Algo parecido com isso:
      for programador in programadores:
      Programador: {{ programador.nome }}
      for linguagem in programador.linguagens.all:
      Linguagem: {{ linguagem.nome }}
      basicamente isso ai em cima.
      Espero que ajude.
      Abraço.

    • @pedrowegner9167
      @pedrowegner9167 2 роки тому

      @@SamuelGoncalvesPython Muito obrigado =D

  • @jeancharlles9
    @jeancharlles9 3 роки тому

    Samuel, mais uma vez, muito obrigado por compartilhar estes conhecimentos. Me ajudou demais!

  • @BorysYeltsin
    @BorysYeltsin 9 місяців тому +1

    Bom dia Samuel! tenho uma model clientes, uma model produtos , uma model pedidos e uma model detalhes do pedido. A model pedidos tem uma foreingkey clientes, a model detalhes do pedido tem 2 foreingkeys: foreingkey pedido e foreingkey produtos . Preciso na model pedido acrescentar nome, endereço, telefone e endereço de entrega. Na model detalhes preciso acrescentar descrição do produto, quantidade, preço unitário, e total. É possivel usar o Relacionamento Many To Many para o formulário pedidos?

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  9 місяців тому

      Olá. Tudo bem?
      Claro. É possível sim.
      Mas isso vai exigir provavelmente alguns ajustes no front, pois vc não sabe quantos o usuário vai querer inserir. Vai precisar deixar dinâmico.
      Talvez o uso de javascript poderia ser útil também.

  • @ericomarques2575
    @ericomarques2575 2 роки тому +1

    Olá Samuel, Muito obrigado pelo conteúdo, tem me ajudado bastante nos projetos que estou desenvolvendo. Eu tenho uma dúvida: na verdade, é um erro que está acontecendo no meu modelo:
    Estou testando um relacionamento ManytoMany parecido com o seu segundo exemplo, mas quando eu dou o MAKEMIGRATIONS ele fala que o modelo intermediario não possui Foreing Key. Pesquisei um monte e ainda não achei nenhum lugar que me ajudasse a resolver esse problema, você poderia me ajudar? ou pelo menos me dar um direcionamento de onde posso conseguir essa informação?
    Muito obrigado

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  2 роки тому

      Olá, camarada.
      O erro já pode estar dizendo muita coisa.
      Se vc criou o modelo intermediário, verifique se ele realmente tem duas FKs. Uma para cada um dos modelos.
      Boa sorte ai.

  • @tiagogrand
    @tiagogrand 4 роки тому +2

    Muito obrigado por essa aula, não havia entendido ainda como fazer essa relação no Django e pude aprender bem com esse vídeo. No momento estou tentando criar um sistema de vendas, você teria algo relativo a como fazer a relação de estoque com vendas? Desde já agradeço. Parabéns pelo canal.

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому

      Obrigado, Tiago.
      Preciso saber qual é a sua dúvida, especificamente, pra poder ajudar melhor.
      Mas se você está iniciando, tenho algo legal.
      Estou com um projeto de mentoria gratuita para iniciantes.
      Me chama no insta @samuelgoncalves.tech

  • @RichardChaonks
    @RichardChaonks 2 роки тому +1

    Curtida "morota"! Agora vamos a aula kkkkkkkkk

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  2 роки тому

      Hahahahhahahahahhaa
      Melhor comentário com com direito a curtida “marota”. Kkkkkk
      Sucesso aí, camarada

  • @vkRenan
    @vkRenan 2 роки тому +1

    Então se eu tiver uma tabela Curso e cada curso tem vários episódios, funcionaria ?

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  2 роки тому

      Depende.
      Cada episódio pertence APENAS a um curso específico?
      Se a resposta da pergunta acima for SIM: vc vai usar o relacionamento oneToMany (manyToOne, que é a mesma coisa).
      Se a resposta for NÃO: vc vai usar o ManyToMany sim.
      O que determina qual relacionamento vai usar são as regras que vc determina de acordo com a necessidade do projeto.

  • @raphaelcazer8394
    @raphaelcazer8394 2 роки тому +1

    Mano, uma dúvida, da pra fazer isso sem o filter? Eu quero que retorne todos os filmes, como no primeiro exemplo, mas quero o nome deles, não a Query, já tentei de tudo e nada ainda.

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  2 роки тому

      A query já tem todos os dados.
      Ai, na hora de exibir os dados, vc exibe o que vc quiser.
      Dentro do for vc colocar pra printar o atributo
      nome_tabela.nome_campo
      Qq dúvida, só falar.

  • @freddykruggerr
    @freddykruggerr 4 роки тому +2

    Parabéns pelo vídeo. Sabe dizer se é possível fazer uma aplicação que ao alterar um dado do banco de dados ele também altere este dado numa planilha excel online ou afim? pq uso o heroku para minha aplicação, mas, como é gratuito vai que dê problemas e os dados sumam neh? por isso importante que eles também fiquem em algum outro lugar

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому +2

      Obrigado, Diogo.
      Bom. Sua pergunta é complexa pq vc perguntou algo diferente do que você realmente quer. kkkkkkkk
      Mas vou te responder em duas etapas. O que você perguntou e o que vc realmente quer saber (na minha visão) rsrs
      Tem como uma aplicação atualizar uma planilha online?
      Sim. Tem. Pra isso você terá que implementar serviços dentro da sua aplicação que quando os dados forem alterados, eles vão chamar outros serviços externos (os da sua planilha externa) e inserir ou alterar dados.
      Respondendo o que vc realmente precisa:
      Backup de banco de dados. Simples assim.
      Os dados do banco, seja ele qual for, pode ser exportado em formato de arquivo, através de um dump (depois pesquise isso para seu banco).
      Esse dump gera um arquivo que você pode usar para recriar o banco em outro servidor.
      Ou seja, se você fizer o backup do banco todo dia de madrugada, e algo acontecer com o servidor em algum momento, você consegue voltar ao estado da última madrugada.
      Dica marota: Nunca salve o arquivo de backup no mesmo servidor do banco de dados, pois se ele der pau, vc perde os dados e o backup.
      Armazene em outro computador, em outro lugar.
      O texto ficou um pouco extenso, mas espero que esclareça.
      Por favor, diga se entendeu o que eu eu mandei. rsrs
      Abraço.

    • @freddykruggerr
      @freddykruggerr 4 роки тому +1

      @@SamuelGoncalvesPython muito obrigado Cara!!

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому

      Disponha

  • @UilanSouza
    @UilanSouza 2 роки тому +1

    Eu vi que o model é Linguagem mas quando você acessa você acessa p1.linguagens no plura, pq isso acontece?

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  2 роки тому +1

      Boa pergunta, Uilan.
      Isso acontece pq eu defino no relacionamento dentro do model Programador que o "related_name" do campo é "linguagens". Mas poderia ser qualquer outro nome.
      o related_name determina como vc vai mencionar aquele objeto nas queries.
      Espero ter esclarecido.
      Abraço.

    • @UilanSouza
      @UilanSouza 2 роки тому

      @@SamuelGoncalvesPython ajudou sim, muitíssimo obrigado:)

  • @eversoncoutinhooficial
    @eversoncoutinhooficial 4 роки тому +1

    Fiquei com dúvida pq vc conseguiu resolver o problema no final usando o .First()

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому

      Pois quando você usa o comando .filter() ele trás uma lista (uma query). Mesmo que contenha somente um objeto, vem no formato de lista.
      Quando você utiliza o comando .first() você está pedindo pra resgatar o primeiro objeto dessa lista. E a partir desse momento, você tem um objeto e não uma lista.
      E tendo um objeto vc consegue chamar os atributos dele, especificamente.
      Ficou claro?

  • @andremarques6555
    @andremarques6555 4 роки тому +1

    mano não querendo abusar se você pudesse ajudar ou fazer videos relacionados a isso, como posso colocar aquele responder nós comentários e outra em deploy se eu colocar o django como posso fazer com que só quem possa apagar o comentário seja o administrador ou quem comentou

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому

      Não tenho nenhum conteúdo exatamente assim ainda na lista, mas posso adicionar mais pra frente.
      Mas sugiro você dar uma olhada sobre a biblioteca "Django Guardian". Ela ajuda no controle de permissões a nível de objeto.
      Com ela você poderá determinar que só vai excluir quem é o dono ou quem é o administrador.
      --> Isso vai te ajudar na questão de permissão
      Se as coisas ainda estiverem muito obscuras, comenta ai ou me chama no insta @samuelgoncalves.tech.

    • @andremarques6555
      @andremarques6555 4 роки тому

      @@SamuelGoncalvesPython valeu meu nobre

  • @andremarques6555
    @andremarques6555 4 роки тому +1

    como como poderia fazer tipo post e comentários séria manytomany também?

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому +1

      Beleza, André?
      Não poderia. Pois um comentário não pode pertencer ao mesmo tempo a vários posts.
      Neste caso seria apenas um relacionamento simples (many to one). Onde você coloca uma chave no modelo comentário, apontando para o modelo post.
      Qualquer dúvida, só falar.

    • @andremarques6555
      @andremarques6555 4 роки тому

      @@SamuelGoncalvesPython vc poderia me dizer como teria que fazer essa relação no Django, teria que criar uma tabela extra ?

    • @andremarques6555
      @andremarques6555 4 роки тому

      @@SamuelGoncalvesPython entendi
      vc poderia me dizer como fazer porque está me pedindo dois parametros e eu não entendi post = models.ManyToOneRel(Post, related_name="commit", on_delete=models.CASCADE)
      TypeError: __init__() missing 2 required positional arguments: 'to' and 'field_name'

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому

      Não. Somente as duas que já existem para os modelos post e comentário são suficiente.
      Dentro do modelo Comentário você vai criar um campo de foreign key apontando para Post

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  4 роки тому

      Dentro dos comentários
      post = models.ForeignKey(Post, related_name="commit", on_delete=models.CASCADE)

  • @edsonpassos7912
    @edsonpassos7912 3 роки тому

    Bom dia professor, obrigado pelas dicas! Segui seu exemplo e criei um model Conformidade e outro t9Questao, entretanto, no Admin a t9Questao está retornando None: Conformidade 3 - (a4_modulo_auditoria.t9Questao.None). O que pode ser?

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  3 роки тому

      Bom dia, Edson. Não sei se entendi bem.
      Caso seja na lista, você tem que sobrescrever o método "__str__(self)"
      nesse método você determina o retorno que será o nome do objeto na lista.
      Vai ficar mais ou menos assim:
      def __str__(self):
      return self.nome # ou qq coisa que vc queira exibir como nome.
      Depois de fazer me diga se deu certo.

    • @edsonpassos7912
      @edsonpassos7912 3 роки тому

      @@SamuelGoncalvesPython Obrigado professor! Venho de outras linguagens e estou com um pouco de dificuldade na documentação do Django, comprei alguns cursos da Udemy mas não gostei porque eles entregam tudo pronto e não ensinam a pensar. O senhor poderia indicar algum livro básico sobre Django para que eu possa aprender os fundamentos, pois precisarei desenvolver projetos de auditoria mais complexos e sem estes fundamentos não estou conseguindo avançar.

    • @edsonpassos7912
      @edsonpassos7912 3 роки тому

      Minha maior dificuldade está em exibir os dados nos templates. São vários relacionamentos e as tabelas (filho) deverão aparecer em cascata no html. Vi um vídeo sobre inline que o senhor apresentou, seria mais ou menos naquela linha só que com várias tabelas. Desculpe tomar seu tempo, mas já perdi semanas nesse ponto e não consigo avançar.

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  3 роки тому

      @@edsonpassos7912 Esse vídeo que eu mostrei o inline eu estava falando do Admin, creio que não seja o seu caso, se for construir um sistema mais complexo.
      Pois se for assim, precisaria de usar os templates mesmo, que são mais flexíveis.
      Posso ver se gravo um vídeo falando disso, mas se estiver com muita pressa me chama no insta @samuelgoncalves.tech que eu vejo o que posso fazer.

    • @edsonpassos7912
      @edsonpassos7912 3 роки тому

      @@SamuelGoncalvesPython , muito obrigado professor!

  • @josedias5758
    @josedias5758 2 роки тому +2

    Boa tarde Samuel, tudo bem?
    Assisti ao vídeo Relacionamento Many_to_Many para tentar enxergar uma solução para a minha dificuldade, mas não consegui ainda vislumbrar uma solução.
    Antes de expor meu problema, fique à vontade para não responder, caso entenda que estou abusando da sua boa vontade.
    Não tenho praticamente nenhuma experiência com Python e Django e estou aprendendo....
    Vamos ao problema:
    Tenho 3 classes básicas de dados:
    Graduação -> Iniciante, Básica, Intermediária, Avançada
    Treinamento -> Primeiros passos, Respiração, Postura, Movimentos de braços, Movimentos de pernas
    Atividades -> Objetivo do treino, Energização, Alinhamento da coluna, Posicionamento do braços, Posicionamento das pernas, Movimentos laterais, Movimento de avanço, Movimento de recuo
    Uma Graduação possui Treinamentos, que por sua vez possui Atividades; desta forma, uma atividade pode estar em 1 ou mais Treinamento e um mesmo Treinamento pode estar em 1 ou mais Graduação.
    Pelo que entendi, os relacionamentos entre as classes seriam do tipo Many_to_Many.
    Se sim, como poderia criar um form no Admin para cadastro de Graduação e Treinamento que funcionasse como Atribuição de Grupos e Permissões a usuários, conforme o que existe no Admin?
    Novamente, se estou exagerando, não precisa responder. mas se puder, serei imensamente grato.
    Obrigado,
    José Dias

    • @SamuelGoncalvesPython
      @SamuelGoncalvesPython  2 роки тому

      Fala camarada, tudo bem?
      Primeiro ponto é que para definir se um relacionamento é manyToMay ou oneToMany vc tem que levar em consideração as duas tabelas que estão envolvidas. Não pode ser algo "genérico".
      Segundo ponto, após fazer os relacionamentos corretos, a forma de colocar eles na mesma página do admin se chama "inline".
      Se vc pesquiser por django admin form inline vai achar material. Acho que até tenho um vídeo sobre isso.
      Espero que isso esclareça um pouco e te dê um direcionamento.