[pyar] Usar un único programa desde más de una empresa (encarar el problema)

Daniel dmlistapython en gmail.com
Lun Jun 13 18:53:24 ART 2011


El día 13 de junio de 2011 18:50, Matías Bellone
<matiasbellone en gmail.com> escribió:
> 2011/6/13 Daniel <dmlistapython en gmail.com>:
>> El día 13 de junio de 2011 18:19, Matías Bellone
>> <matiasbellone en gmail.com> escribió:
>>> 2011/6/13 Daniel <dmlistapython en gmail.com>:
>>>> Gente:
>>>>    Tengo alguna duda respecto a cuál sería la mejor forma de encarar
>>>> el problema
>>>>
>>>> -Un programa en hecho en django necesita ser usado por más de una empresa
>>>> -lo posible quiero mantenerlo cómo un único programa
>>>> -Necesito "aislamiento" de la información,  es decir que cada uno use
>>>> SUS productos, SUS proveedores
>>>>  y no interfiera la información de algún otro usuario de empresa.
>>>>
>>>> No se bien como encarar el problema, no se me ocurre otra que poner
>>>> una "bandera" en cada
>>>> registro para saber de que empresa es, pero no me parece muy pythonica la forma
>>>
>>> La única forma de *garantizar* la división es tener dos instancias
>>> separadas de Django, dos bases de datos distintas.
>>>
>>> Si no querés/podés hacer eso, usá "Sites":
>>>   https://docs.djangoproject.com/en/1.3/ref/contrib/sites/
>>>
>> Si uso sites, no tendría un programa distinto para cada empresa y
>> mantenerlo por separado?
>
> No.
>
> Sites es un framework (que incluye middleware, modelo, un par de
> funciones útiles y un model manager al menos) que incorporás en tu
> aplicación. Modificás tus modelos para que tengan una ForeignKey a un
> Site y lo separás de esa forma.
>
> Y luego, normalmente, modificarías la lógica de tu aplicación para que
> sólo tenga en cuenta las cosas que son del mismo Site. Sin embargo,
> Sites ya viene con un Model Manager (como está bien explicado en la
> documentación pertinente:
> https://docs.djangoproject.com/en/1.3/ref/contrib/sites/#the-currentsitemanager
> ) por lo que lo agregás a tus modelos de la siguiente forma:
>
> # arriba de todo
> from django.contrib.sites.models import Site
> from django.contrib.sites.managers import CurrentSiteManager
>
> class mi_modelo(models.Model):
>    [acá van todas tus cosas]
>    site = models.ForeignKey(Site)
>    on_site = CurrentSiteManager
>
> Y después modificás tus vistas para que en lugar de usar
> "mi_modelo.objects", usen "mi_modelo.on_site". Si hacés eso en todos
> lados, Sites se encarga que al cargar un objeto sólo se carguen las
> cosas que tienen el mismo "Site".
>
> Sites fue justamente creado para ser usado en algo como lo que vos
> querés (y un par de situaciones más raras también). Es parte del
> "batteries included" de Django :P
>
¡que grande!
muchas gracias por dedicar tiempo a responder. muy agradecido


-- 
Daniel Malisani



More information about the pyar mailing list