Question
· Oct 24, 2023

Django est-il disponible avec ObjectScript?

Est-il possible d'utiliser Django avec InterSystems Iris, dont les classes sont implémentées en ObjectScript ?

Class EpErp.ARTICLES Extends (%Persistent, %JSON.Adaptor, %XML.Adaptor) [ ClassType = persistent, SqlTableName = ARTICLES ]

{

Parameter IDPROPERTY = "IDARTICLES";

Property IDARTICLES As %BigInt [ SqlColumnNumber = 2, SqlFieldName = IDARTICLES ];

Property dhDateCreation As %TimeStamp [ SqlColumnNumber = 3, SqlFieldName = dhDateCreation ];

Property sCode As %String(MAXLEN = 30) [ SqlColumnNumber = 4, SqlFieldName = sCode ];

Property sDesignation As %String(MAXLEN = 50) [ SqlColumnNumber = 5, SqlFieldName = sDesignation ];

Property nTypeArticle As %Integer [ InitialExpression = 0, SqlColumnNumber = 6, SqlFieldName = nTypeArticle ];

Property nType As %Integer [ InitialExpression = 0, SqlColumnNumber = 7, SqlFieldName = nType ];

etc ...

Y a-t-il un moyen d'accéder aux données via Django malgré le fait que les classes soient en .cls ?

Si oui, Comment s'y prendre?

J'ai déjà travaillé avec Django et Python je sais créer une application avec mais je ne sais pas comment faire avec les classes en .cls

 

Merci par avance

Version du produit: IRIS 2023.2
Discussion (7)1
Connectez-vous ou inscrivez-vous pour continuer

Bonjour,

Je pense que c'est possible, cependant je n'ai pas encore eu l'occasion de le faire.

L'idée est la suivante :

Creer votre modèle Django en utilisant les classes Python qui vont bien.

example :

class MyModel(models.Model):
    # … fields …

    class Meta:
        managed = False # No database creation or deletion operations 
        db_table = 'MyTable'

Note : il faut bien mettre managed = False pour éviter que Django ne crée la table.

Ou alors vous pouvez utiliser la commande django inspectdb pour générer le modèle Django à partir de votre base de données.

python3 manage.py inspectdb

ou encore

python3 manage.py inspectdb > app_name/models.py

Bonjour Guillaume,

Je vous remercie pour votre réponse.

Actuellement, nous avons une base de données contenant 900 tables, et nous souhaitons utiliser Python en combinaison avec Django-Iris et Django-REST-Framework pour créer des API. Nous nous demandons s'il existe une solution pour cela. Nous nous interrogeons sur l'utilisation de l'outil inspectdb ou la création manuelle de modèles et si ces approches risquent de dupliquer notre base de données. Notre principale préoccupation est de savoir si nous pouvons mettre en place un modèle MVC dans ce contexte.

Nous vous remercions par avance pour vos conseils.

Cordialement

Laurent

Vous pouvez utiliser Django pour créer des API sur votre base de données.

Les options avec inspectdb ou la création manuelle de modèles sont possibles et ne dupliqueront pas votre base de données.

Elles sont là pour creer un mapping entre votre base de données et des objets Python (les modèles Django).
Vous etes donc dans un contexte "MVC" (en fait MTV pour Model Template View si vous utilisez Django en tant que framework web).

Si vous utilisez uniquement Django pour créer des API, vous n'avez pas besoin de templates et de vues, mais vous pouvez utiliser les modèles Django pour créer des objets Python qui représentent vos tables de base de données et donc utiliser les capacités d'ORM (Object Relational Mapping) de Django pour manipuler vos données.

Eh bien, la méthode proposée par Guillaume est correcte, vous pouvez utiliser des tables déjà existantes ou des classes persistantes simples dans IRIS en utilisant la méthode proposée, dès que les tables sont disponibles via SQL simple.

900 tables, ça a l'air merveilleux, oui, c'est du bon travail, mais je ne sais pas quoi proposer d'autre. La beauté de l'utilisation de Django dans ce projet, c'est que vous pouvez utiliser l'expérience de Django et travailler à partir de la communauté, qui est bien plus grande que la simple communauté InterSystems.

Et j'ai fait ce support pour IRIS, pour Django, si vous rencontrez des problèmes avec cela, faites-le-moi savoir, via les Issues de github, retrouvez-moi sur InterSystems Discord, ou ici sur DC