Charleno Pires | 24 Feb 2008 23:39
Picon
Gravatar

Atualização dos Modelos de Dados

Aê pessoal,

No rails a gente tem o migration pra nos auxiliar na modelagem dos dados, o seu "controle de versão", muitas vezes é uma mão na roda. No django, fiz a modelagem no model.py da minha aplicação, e quando precisei alterar essa modelagem, e dei um manage.py syncdb, não alterou meu banco. Renomeei uma coluna, adicionei outra num num outro modelo, ou seja, alterei os atributos das classes, e quando dei aquele comando nada. Devo estar fazendo algo errado, porém num sei como é :(

Tem algum comando pra atualizar meus modelos? caso não, como poderia fazer isso?

Atenciosamente,

Charleno Pires
Desenvolvedor Web
GTalk: charleno-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Charleno Pires | 25 Feb 2008 00:18
Picon
Gravatar

Re: Atualização dos Modelos de Dados


Dando uma googlada e uma ircada, rs, eu descobri que o django não tem
nenhum comando para alterar as tabelas, e ele fala isso na sua
documentação, numa nota bem visível, rs. :(

Syncdb will not alter existing tables

syncdb will only create tables for models which have not yet been
installed. It will never issue ALTER TABLE statements to match changes
made to a model class after installation. Changes to model classes and
database schemas often involve some form of ambiguity and, in those
cases, Django would have to guess at the correct changes to make.
There is a risk that critical data would be lost in the process.

If you have made changes to a model and wish to alter the database
tables to match, use the sql command to display the new SQL structure
and compare that to your existing table schema to work out the
changes.

Resumindo, qr mudar, muda no braço, qm mandou num projetar antes, rs.
Mas um cara no irc me deu uma luz, disse que dava pra mudar
manualmente usando o manage.py sqlall, ainda num sei como faço isso,
mas eu chego lá, to entendendo devagar.
--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Charleno Pires | 25 Feb 2008 01:16
Picon
Gravatar

Re: Atualização dos Modelos de Dados


Então estava eu passeando pelo irc, quando, de repente, o andrews
medina diz: eu tenho a solução! anram.

http://code.google.com/p/django-evolution/
http://code.google.com/p/deseb/
http://code.google.com/p/dmigrate/
http://code.google.com/p/django-schemaevolution/

O que eu achei mais interessante foi esse:
http://code.google.com/p/dmigrate/wiki/Help

Ele acredita que a django-evolution vai fazer parte do Django nas
próximas versões.

Tem uma thread interessante sobre isso aqui:
http://reddit.com/r/programming/info/60hgx/comments/

Bom, vou testar, qualquer coisa mostro o resultado disso, mas se
alguem já usou algum desses e quiser se pronunciar será bem vindo. ;-)

Atenciosamente,

Charleno Pires
Desenvolvedor Web
Teresina- Piauí
Gtalk: charleno@...
--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Guilherme Mesquita Gondim | 25 Feb 2008 01:43
Gravatar

[django-brasil] Re: Atualização dos Modelos de Dados


Charleno Pires <charleno@...> writes:

> Resumindo, qr mudar, muda no braço, qm mandou num projetar antes, rs.
> Mas um cara no irc me deu uma luz, disse que dava pra mudar
> manualmente usando o manage.py sqlall, ainda num sei como faço isso,
> mas eu chego lá, to entendendo devagar.

Tem uma thread nessa lista de discussão sobre isso que você
precisa. Inclusive com análise de várias ferramentas disponíveis para
essa tarefa.

Se eu não me engano, é esta:
http://groups.google.com/group/django-brasil/browse_thread/thread/7583cdf170b5e937/7b51f492b26124ff?lnk=gst&q=django+evolution#7b51f492b26124ff

Até,
semente

--

-- 
Guilherme Mesquita Gondim (semente)

--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Charleno Pires | 25 Feb 2008 02:37
Picon
Gravatar

Re: Atualização dos Modelos de Dados


> Tem uma thread nessa lista de discussão sobre isso que você
> precisa. Inclusive com análise de várias ferramentas disponíveis para
> essa tarefa.
>
> Se eu não me engano, é esta:http://groups.google.com/group/django-brasil/browse_thread/thread/758...
>
> Guilherme Mesquita Gondim (semente)

É essa mesma, caiu como uma luva ;-), thanks!!!
--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Picon

Re: Ajax com JSON


Ola Mayron,
Vamos ver se consigo montar alguma coisa simples porem completa. Não vai
dar para testar vai ser de cabeça mesmo, ok?

Suponha o seguinte HTML. Voce digita no input-text a sigla de uma
unidade da federação e uma rotina ajax (jQuery) executa uma view que
retorna o nome da UF no formato JSON, em seguida a rotina javascript
popula os span's (sigla e nome) com os valores retornados. 

<html>
<head>
  <script type="text/javascript" src="/recursos/js/jquery.js"></script>
  <script type="text/javascript">
        /* A rotina $(document).ready(...) é executada 
           após a página ser carregada.
        */
        $(document).ready(function() {
            /* Define o handler para o evento click do botão
               cujo id é igual a "busca".
            */
            $("#busca").click(clickBntBusca);
        });

        function clickBntBusca(evento) {
            /* Cria o objeto "dados" com a propriedade sigla_uf 
               que contém o valor do input com id igual a "sigla_uf".
            */
            dados = { sigla_uf: $("#sigla_uf").val() }";

            /* Executa uma chamada remota ajax. 
               O jQuery possui outros métodos para fazer chamadas 
               remotas, por exempo: $.load, $.post, $.get
ou $.getJSON. 
               Em alguns casos eu prefiro usar o método $.ajax, pois ele
               permite fazer tratamento de erro.
            */
            $.ajax({
                type: "POST",                  // Método 
                url: "/teste/busca_nome_uf/",  // View a ser executada 
                data: dados,                   // Dados a serem enviados
                success: sucessoAjax,          // Função a ser exec. em
                                                  caso de sucesso.
                error: erroAjax,               // Função a ser exec. em
            )};                                // caso de erro. 
        }

        /* É executada se a chamada ajax terminar com sucesso.
           Recebe a resposta da view no formato JSON.
           {"uf": [{"nome": "Distrito Federal", "sigla": "DF"}]}
        */
        function sucessoAjax(resposta) {
            /* eval vai converter a resposta num objeto 
            */ 
            var dadosJSON = eval(' + resposta +');

            /* Atualiza os span's com os valores recebidos
               da view.
            */
            $('#sigla').val(dadosJSON.uf[0].sigla);
            $('#nome').val(dadosJSON.uf[0].nome);
        }

        function erroAjax(XMLHttpRequest, textStatus, errorThrown) {
            /* Fazer o tratamento de erro.
        }
  </script>
</head>
<body>
  <label for="sigla_uf">Sigla UF:</label>&nbsp;
  <input type="text" name="sigla_uf" id="sigla_uf" value=" /><br/>
  <input type="button" id="busca" value="Busca Nome" /><br/><br/>
  Sigla: <span id="sigla"></span><br/>
  Nome: <span id="nome"></span>
</body>
</html>

Para esse exemplo a view é bem simples:

def busca_nome_uf(request):
    sigla_uf = request.POST.get('sigla_uf')
    resposta = simplejson.dumps({"uf": [u.__dict__ for u in
UnidadeFederacao.objects.filter(sigla=sigla_uf)]})
    return HttpResponse(resposta, mimetype="text/javascript")

É isso, por favor, me desculpe se tiver algum erro, realmente não testei
e o sono já está pegando... hehehe. Alem disso, para falar a verdade nem
sei se é a melhor maneira, simplesmente é como eu faço na minha
aplicação. Se alguém tiver uma melhor aceitamos sugestões... :D

[]s
Wilton

Em Dom, 2008-02-24 às 11:45 -0300, MAYRON escreveu:
> Wilton, poderia disponibilizar um exemplo melhor (se possível
> explicar) o uso do simplejson com o django?
> Se não for pedir D+ é claro :D
> 
> 
> -- 
> Mayron Cachina Santiago
> http://cachina.wordpress.com
> > 

--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Picon

Re: Ajax com JSON


Andrews,
você tem razão, dizer que o simplejson é melhor ficou forte mesmo,
faltou contextualizar a minha observação. 

Eu tenho usado ajax e consequentemente o json apenas para transferência
e exibição de dados em combo's, table's, div's, etc. Realmente os dois
métodos são uteis e cada um é mais adequado (ou não) para determinado
tipo de problema.

Prometo tomar mais cuidado com esse tipo de afirmação... hehe...

[]s
Wilton

Em Dom, 2008-02-24 às 10:56 -0400, Andrews Medina escreveu:
> 2008/2/20 Wilton José P. dos Santos <wiltonj@...>:
> > Só um detalhe interessante com relação ao uso de simplejson... Acho que o
> > simplejson é melhor do que o serializers.serialize.
> >
> >  No segundo caso o resultado é menor, mais limpo e mais fácil de trabalhar
> > no javascript. Não sei se eu estava fazendo errado ao usar o
> > serializers.serialize, mas parece que o simplejson é melhor, certo?
> >
> 
> Olá Wilton,
> 
> seguinte dizer que o JSON gerado direto pelo simplejson é melhor que o
> gerado pelo serializer é algo bem pessoal. O JSON gerado pelo Django é
> algo mais genérico. Com ele você pode iterar pelos fields, pode
> descobrir qual é o model relacionado ao JSON gerado e qual é o valor
> da chave primaria.
> 
> Já no gerado pelo simplesjson é mais simples só poderia ser usado para
> uma exbição de dados mesmo.
> 
> O serializers alem de ser genérico não é fechado apenas ao JSON, pode
> gerar XML também e provê uma interface para criação de serializers em
> outros formatos.
> 
> []'s
> 

--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Lippert | 25 Feb 2008 12:59
Picon

Re: Ajuda em Pagina


Desculpem-me, mas para mim que sou novo já está dificl, ja to lendo
umas 500 apostilas, quando eu tento somente pedir
uma ajuda de pessoas mais experientes, me respondem desta forma, isso
acho que deixaria qualquer um nervoso.
só pedi ajuda não ofendi ninguem.
agraço a todos que me responderam.

Muito Obrigado.

On 22 fev, 21:39, "Vinícius de Figueiredo Silva"
<viniciu...@...> wrote:
> 2008/2/22 Andrews Medina <andrewsmed...@...>:
>
> >  Vinicius a lista está abertas a pessoas com ou sem conhecimento sobre
> >  desenvolvimento para web, por isso gostaria de pedir a todos que não
> >  enviassem mensagens que não estão relacionadas com o assunto
> >  discutido, que nesse caso é envio de e-mail via Django.
>
> Sem problemas, peço desculpas.
>
> Sobre o tópico, se quer apenas um formulario que envie emails talvez
> fosse interessante utilizar o web.py [1] que é menor do que o Django e
> resolve essa tarefa em poucas linhas. Fica a sugestão.
>
> [1]http://webpy.org/
>
> --
> Vinícius.
> personal site -http://vinicius.oitobits.net
> gaming blog -http://www.oitobits.net
--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Gustavo Gonçalves | 25 Feb 2008 13:03
Picon

Re: Atualização dos Modelos de Dados

Olá Charleno,

Uso o deseb por sua simplicidade. Funciona muito bem e não precisa criar outras tabelas no banco de dados. Basta dar um "import deseb" no settings.py e depois fazer "manage.py evolvedb". As mudanças que ele fizer no banco ficam armazenados em um arquivo chamado schema_evolve.py, assim pode-se manter um controle de versão.

O django-evolution é legal, parece que está mais maduro, mas você precisa instalar ele como uma app em seu projeto. Ele cria umas tabelas no banco de dados para armazenar as modificações e controlar a versão do banco. Isso eu não gostei nele, por isso fiquei com o deseb.

deseb e django-evolution são os projetos mais maduros nesta área.

Abraço

Em 24/02/08, Charleno Pires <charleno-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:

> Tem uma thread nessa lista de discussão sobre isso que você
> precisa. Inclusive com análise de várias ferramentas disponíveis para
> essa tarefa.
>

> Se eu não me engano, é esta:http://groups.google.com/group/django-brasil/browse_thread/thread/758...
>
> Guilherme Mesquita Gondim (semente)

É essa mesma, caiu como uma luva ;-), thanks!!!

Gustavo H. de A. Gonçalves
Fundação Aprender
Centro de Estudos, Pesquisa e Tecnologia
www.fundacaoaprender.org.br
(35)3222-1214
--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---

Charleno Pires | 25 Feb 2008 13:13
Picon
Gravatar

Re: Atualização dos Modelos de Dados

Rpz, eu testei o Evolution, e realmente percebi isso que você disse, ele criou uma tabela no banco e tive de adicioná-lo como uma app no settings, porém ele disse não ter nenhuma evolução a fazer, e isso com um modelo diferente do que tá no banco. :( ainda vou testar esse deseb que era a minha segunda opção.

Fico bem contente em saber que ele num cria tabelas no banco, ou mesmo, vem como app.
Quando concluir os testes, te falo qualquer coisa.

Atenciosamente,

Charleno Pires
Desenvolver Web
Teresina - Piauí
GTalk: charleno-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
--~--~---------~--~----~------------~-------~--~----~
Grupo "Django Brasil" em Grupos do Google.
http://groups.google.com.br/group/django-brasil
-~----------~----~----~----~------~----~------~--~---


Gmane