Aplicativos com dependência cíclica

13 views
Skip to first unread message

Rodrigo Pinheiro Matias

unread,
Nov 9, 2009, 7:27:31 AM11/9/09
to django...@googlegroups.com
Pessoal estou com um problema, queria saber se alguem tem ideia de como resolver:

No pacote rh.models tenho.

class Lotacao(...):
   ...

class Servidor(...):
   ...
   documento = models.ManyToMany(Documento)
   ...

class Documento(...):
   ...
   copia = models.ForeignKey(ged.Arquivo)
   ...

No pacote ged.models tenho.

class Arquivo(...):
   ...
   user = models.ForeignKey(User)
   lotacao = models.ForeignKey(rh.Lotacao)
   ...

Será se existe uma forma de contornar este problema sem ter que mudar o local dos modelos, uma vez que esta intervenção seria muito cara para equipe de programação.

--
Rodrigo Pinheiro Matias
Bacharel em Ciência da Computação

Celular
+55 (063) 8111.2080

Telefone em horário Comercial
+55 (063) 3216.7564

Luciano Ramalho

unread,
Nov 9, 2009, 7:31:56 AM11/9/09
to django...@googlegroups.com
2009/11/9 Rodrigo Pinheiro Matias <rodrigo...@gmail.com>:

> Pessoal estou com um problema, queria saber se alguem tem ideia de como
> resolver:
>
> No pacote rh.models tenho.
>
> class Lotacao(...):
>    ...
>
> class Servidor(...):
>    ...
>    documento = models.ManyToMany(Documento)
>    ...
>
> class Documento(...):
>    ...
>    copia = models.ForeignKey(ged.Arquivo)
>    ...
>
> No pacote ged.models tenho.
>
> class Arquivo(...):
>    ...
>    user = models.ForeignKey(User)
>    lotacao = models.ForeignKey(rh.Lotacao)

Qual é a lógica deste campo lotacao no modelo arquivo? É a lotacao do
user, ou tem a ver com o documento?

[ ]s
Luciano

Paulo Roberto Macedo Chaves

unread,
Nov 9, 2009, 7:34:57 AM11/9/09
to django...@googlegroups.com
Você pode referenciar FKs usando a string "app.ModelName"

Por exemplo:

documento = models.ManyToMany("rh.Documento")




Rodrigo Pinheiro Matias escreveu:

marcos thomaz

unread,
Nov 9, 2009, 7:42:36 AM11/9/09
to django...@googlegroups.com
Você pode dar o import de dentro da classe.

[]'s

Marcos Thomaz


De: Rodrigo Pinheiro Matias <rodrigo...@gmail.com>
Para: django...@googlegroups.com
Enviadas: Segunda-feira, 9 de Novembro de 2009 8:27:31
Assunto: [django-brasil] Aplicativos com dependência cíclica


Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - Celebridades - Música - Esportes

Rodrigo Pinheiro Matias

unread,
Nov 9, 2009, 7:43:18 AM11/9/09
to django...@googlegroups.com
Cara uso usuário e lotação para controle de acesso. Dando a alusão a grupo e usuario.

2009/11/9 Paulo Roberto Macedo Chaves <probert...@gmail.com>

Luciano Ramalho

unread,
Nov 9, 2009, 10:10:42 AM11/9/09
to django...@googlegroups.com
2009/11/9 Rodrigo Pinheiro Matias <rodrigo...@gmail.com>:
> Cara uso usuário e lotação para controle de acesso. Dando a alusão a grupo e
> usuario.

Mas sabendo o usuário você não sabe a lotação? Talvez o seu modelo
possa ser simplificado. Se não for o caso, os colegas já deram a dica:
usar strings no lugar de referências aos modelos relacionados.

[ ]s
Luciano

Rodrigo Pinheiro Matias

unread,
Nov 9, 2009, 11:51:51 AM11/9/09
to django...@googlegroups.com
Os colegas me deram sim a solução.

Quanto a logica do negocio esta correta, eu posso mudar o usuário, mas não posso mudar a lotação, pq os arquivos pertencem a lotação. Quanto a logica eu sei o usuário sei a lotação é valida, isto é utilizado no momento de gravar o arquivo.

2009/11/9 Luciano Ramalho <ram...@gmail.com>

Rodrigo Pinheiro Matias

unread,
Nov 9, 2009, 11:53:18 AM11/9/09
to django...@googlegroups.com
Só para constar, utilizei a dica do Marco Thomaz, mas parece que todas cabem como solução do problema.

Igor Sobreira

unread,
Nov 9, 2009, 9:07:13 PM11/9/09
to django...@googlegroups.com
2009/11/9 Rodrigo Pinheiro Matias <rodrigo...@gmail.com>
Pessoal estou com um problema, queria saber se alguem tem ideia de como resolver:


No pacote rh.models tenho.

class Lotacao(...):
   ...

class Servidor(...):
   ...
   documento = models.ManyToMany(Documento)
   ...

class Documento(...):
   ...
   copia = models.ForeignKey(ged.Arquivo)
   ...

No pacote ged.models tenho.

class Arquivo(...):
   ...
   user = models.ForeignKey(User)
   lotacao = models.ForeignKey(rh.Lotacao)
   ...

Será se existe uma forma de contornar este problema sem ter que mudar o local dos modelos, uma vez que esta intervenção seria muito cara para equipe de programação.


Você pode usar strings ao invés de dar o import em um model, no formato "nome_da_app.NomeDoModel"

lotacao = models.ForeignKey("rh.Lotacao")   # rh é o nome da app, certo?

Isso foi criado justamente pra evitar imports circulares em models.py


[]s


--
Igor Sobreira
www.igorsobreira.com
Reply all
Reply to author
Forward
0 new messages