Não tem como fazer isso no Django! Reveja a sua modelagem, mas acho
que tem uma maneira de fazer sua modelagem sem esse relacionamento
cruzado.
Se puder compartilhar conosco o escopo da sua modelagem, podemos lhe
ajudar a crirar seus model's.
[]'s
--
Andrews Medina
http://pyman.blogspot.com/
www.andrewsmedina.com.br
On Dec 15, 2007 12:25 AM, Manoela Chagas <manoel...@gmail.com> wrote:
> No caso tenho tabela pessoa e representante
>
> uma pessoa pode muitos representantes
>
> e representantes pode ter muitas pessoas
>
> pensei na MAnyToMany mas não seria isto
No caso você tem pessoas ( clientes ) e representantes, onde um
cliente pode ter vários representantes e um representante pode ter (
representar ) vários clientes é isso?
Nesse caso seria o ManyToManyField sim.
Eu faria algo assim
[code]
class Cliente(models.Model):
nome = models.CharField(max_length=200)
....
class Representantes(models.Model):
nome = models.CharField(max_length=200)
clientes = models.ManyToManyField(Cliente)
...
[/code]
Dessa forma um representante podem ter varios clientes. E mais de um
representante pode representar o mesmo cliente ( assim um cliente pode
ter mais de um representante ).
Se tiver problemas em como inserir os representantes,, clientes, ou
duvidas no desenvolvimento do formulário e interface, ou se eu estiver
viajando na maionese ( é de madrugada ). É só postar. Mas acho que um
modelo assim resolve seu problema.
Estou interessado em Python e fiquei sabendo do Django. Não esperei e entrei
para esta lista de debates.
Inicialmente tenho duas dúvidas:
1. Para desenvolver aplicações terei que fazê-lo no Linux e no Windows não
seria possível, certo?
2. Caso desenvolva em uma máquina com Linux, poderia hospedar a aplicação em
um servidor (intranet) Windows com o Apache?
Desde já agradeço a ajuda.
[],
Maurício
Vamos às respostas:
> 1. Para desenvolver aplicações terei que fazê-lo no Linux e no Windows não
> seria possível, certo?
Errado. Django é baseado em Python e, portanto, é multiplataforma. ;)
> 2. Caso desenvolva em uma máquina com Linux, poderia hospedar a aplicação
> em um servidor (intranet) Windows com o Apache?
Perfeitamente. Atualmente eu utilizo Ubuntu na maioria do tempo, mas no início eu comecei no Windows com Apache.
Apesar de que, *durante o desenvolvimento*, não é necessário um servidor como o Apache. O Django tem no gatilho um servidor perfeito pra ser utilizado durante o desenvolvimento (e, acredite, você vai querer usá-lo ao invés do Apache).
Caso você precise de um tutorial explicativo de como instalar/configurar todo o ambiente necessário para dsenvolver com Django no Windows, eu indico esse (em inglês): http://thinkhole.org/wp/django-on-windows/
Não se esqueça também de passar pelo site da nossa comunidade: http://djangbrasil.org
Abraços e bons estudos. ;)
--------------------------------
Jader Rubini
jader...@gmail.com
http://jaderubini.wordpress.com
> -----Mensagem original-----
> De: django...@googlegroups.com [mailto:django...@googlegroups.com]
> Em nome de Maurício Araújo
> Enviada em: sábado, 15 de dezembro de 2007 07:49
> Para: django...@googlegroups.com
> Assunto: [django-brasil] Iniciante...
Em 15/12/07, Maurício Araújo<ark...@globo.com> escreveu:
>
> Olá pessoal!
>
> Estou interessado em Python e fiquei sabendo do Django. Não esperei e entrei
> para esta lista de debates.
>
> Inicialmente tenho duas dúvidas:
>
> 1. Para desenvolver aplicações terei que fazê-lo no Linux e no Windows não
> seria possível, certo?
Errado (que bom! rs). Tanto o Python quanto o Django são
multiplataforma e funcionam muito bem em Linux, Unix, Windows, Mac e
outro bocado de sistemas operacionais :)
> 2. Caso desenvolva em uma máquina com Linux, poderia hospedar a aplicação em
> um servidor (intranet) Windows com o Apache?
sim, sem problema nenhum, tenho casos assim e existem vários outros
pela rede. Você pode fazer também o contrário, se quiser.
aqui na lista existe uma tendência natural pelo Linux, então
provavelmente você vai ter um *leve* incentivo a usar Linux em tudo,
mas é uma escolha sua.
> Desde já agradeço a ajuda.
você pode iniciar por esses endereços: [1], [2], [3] e [4]
existem vários blogs e sites pelo Google, basta dar uma navegada que
vai encontrar muita coisa boa. Você pode encontrar vários outros nos
"planetas" da comunidade, e ao fim da lista os meus dois.
[1] http://www.pythonbrasil.com.br/
[2] http://www.djangobrasil.org/
[3] http://www.djangoproject.com/
[4] http://www.djangobook.com/
[5] http://www.djangobrasil.org/comunidade/
[6] http://www.djangoproject.com/community/
[7] http://www.pythonbrasil.com.br/planet/
[8] http://marinho.webdoisonline.com/
[9] http://del.icio.us/marinho/django
no mais, estamos aí :)
>
> [],
> Maurício
>
>
> >
>
--
Marinho Brandão (José Mário)
http://marinho.webdoisonline.com/
desculpe pela demora da resposta...
> um cliente pode ter mais de um representante, no caso
> um representante de brita, outro de areia, só q
> assim cada representante tem seus próprios clientes
> nao pode ver os clientes dos outros representantes
> podendo o cliente ser do representante de areia com
> tal id e no representante de brita com tal id
> o representante nao vai ver os clientes dos outros
> se porventura a pessoa for cliente do outro
> representante ele cadastra o cliente como se nao tivesse
> cada representante com seus clientes
> a opção ManyToMany não funcionária neste caso
O relacionamento ManyToMany, traduzindo do inglês, muitos para muitos,
no seu caso representaria que muitos clientes podem ter muitos
representantes ou vice-versa.
Mesmo se configurando manytomany em apenas um dos dois models
envolvidos, pode-se manipular esse relacionamento dos dois lados.
Vamos ao código:
Criei duas classes para ilustrar meu exemplo:
[code]
class Cliente(models.Model):
nome = models.CharField(max_length=100)
def __unicode__(self):
return self.nome
class Representante(models.Model):
nome = models.CharField(max_length=100)
clientes = models.ManyToManyField(Cliente)
def __unicode__(self):
return self.nome
[/code]
Eu coloquei o manytomany no representante, mas poderia ter feito o
contrário, se eu tivesse feito primeiro a classe dos representantes.
Vamos popular a nossa base de dados com algums clientes e
representantes ( qualquer semelhança é mera coincidencia ).
[code]
>>> c1 = Cliente(nome='andrews')
>>> c1.save()
>>> c2 = Cliente(nome='waa')
>>> c2.save()
>>> r1 = Representante(nome='semente ltda')
>>> r1.save()
>>> r2 = Representante(nome='marinho inc')
>>> r2.save()
[/code]
Vamos ver os clientes do representante r1 (semente ltda)
[code]
>>> r1.clientes.all()
[]
[/code]
Bom o representante r1 (semente ltda) não tem nenhum cliente (coitadinho!!!)
Agora temos dois clientes e dois representantes, vamos adicionar o
cliente c1 (andrews) ao representante r2 (marinho inc).
[code]
>>> r2.clientes.add(c1)
>>> r2.clientes.all()
[<Cliente: andrews>]
[/code]
E se quisermos fazer o contrario, definirmos o representante a partir
do clientes. É possivel?
A resposta é: Sim.
Vamos colocar o representante r2 (marinho inc) como representante para
o cliente c2 (waa).
[code]
>>> c2.representante_set.add(r2)
>>> c2.representante_set.all()
[<Representante: marinho inc>]
[/code]
Ou seja instancia.model_set.acao().
Conclusão: o seu caso pode ser resolvido com o ManyToMany.
Acho que está havendo um engano da sua parte. O que você quer é que
apareça no admin para os representantes apenas os clientes que ele tem
e que seja ocultado os outros clientes. Se for isso, o problema não
tem nada haver com o ManyToMany e sim com os componentes de exibição
do admin.
como eu expliquei num email anterior o relacionamento manytomany é
duas pontas, definindo que A é ManytoMany de B não é necessário um
ManyToMany em A falando que B é ManyToMany de A.
Para entender melhor veja a estrutura repetida de tabelas que o Django
ira fazer se voce fizer isso.