IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Django Application Model commun [Python 3.X]


Sujet :

Django Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut Django Application Model commun
    Bonjour à tous !

    J'aimerai savoir comment procéder lorsqu'un model doit faire parti de plusieurs applications.

    Exemple : J'ai mon projet site-reservation

    Une application : Fidélité avec la classe utilisateur, ...,...
    Une application : Réservation avec la classe utilisateur, planning, etc...

    Dois je redéfinir le model utilisateur dans chaque briques de mon projet ?

    Je vous remercie d'avance.

    Cordialement Quentin.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 282
    Points : 36 769
    Points
    36 769
    Par défaut
    Salut,

    Citation Envoyé par quentinb56 Voir le message
    Dois je redéfinir le model utilisateur dans chaque briques de mon projet ?
    Si plusieurs applications => listées dans INSTALLED_APPS alors il faut suivre les guidelines de la documentation pour voir comment utilises les "boûts" d'une application dans une autre. Si c'est autre chose, on peut être très créatif avec modules, classes abstraites, ....

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut
    Merci pour ta réponse rapide.

    Justement je ne suis pas sur d'avoir bien saisi cette partie de la documentation.

    Attributs en lecture seule
    AppConfig.module
    Module racine de l’application, par ex. <module 'django.contrib.admin' from 'django/contrib/admin/__init__.py'>.

    AppConfig.models_module
    Module contenant les modèles, par ex. <module 'django.contrib.admin.models' from 'django/contrib/admin/models.py'>.

    Il peut valoir None si l’application ne contient pas de module models. Notez que les signaux relatifs à la base de données tels que pre_migrate et post_migrate ne sont émis que pour les applications qui ont un module models.


    S'agit il bien de cette partie qui me permet de réutiliser un model d'un module (application) dans un autre module ? D'après l'intitulé du paragraphe, les modèles sont accessibles en lecture, cela implique qu'on ne peut faire des liaisons entre model de différents modules (peut être n'y a t'il pas d'intérêts).

    J'ai pu lire qu'une application bien réalisée pouvait être réutiliser simplement d'un projet à l'autre, j'imagine qu'il faut éviter au maximum ce que je viens d'évoquer ... Cependant pas mal de tutoriaux présentent les applications comme une architecture pour séparer chaque "parties" du projet.

    Si je souhaite faire un module "Employée" et un module "Client" les deux devront utiliser un modèle commun "Utilisateur" ...

    A moins que dans l'idée ma conception soit mauvaise. Et que je dois passer par des abstracts justement ? (cela impliquerait des attributs en répétition dans ma bdd....)

    Pourriez vous m'illustrer vos réponse avec un exemple s'il vous plait ?

    Pour informations il s'agit d'un projet que je souhaite réalisé pour le plaisir.

    Je profite du post pour poser une autre question. En souhaitant réaliser des "réservations" sur un calendrier, cela est il facilement réalisable en utilisant un package calendrier, disponible sur la liste des packages django ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    /* SQLEditor (SQLite)*/
     
     
    CREATE TABLE tb_date
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    i_day INTEGER NOT NULL,
    i_month INTEGER NOT NULL,
    i_year INTEGER NOT NULL,
    i_hour INTEGER,
    i_minute INTEGER
    );
     
    CREATE TABLE tb_family
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    customer_primary INTEGER,
    customer_secondary INTEGER,
    FOREIGN KEY (customer_primary) REFERENCES tb_customer (id) ,
    FOREIGN KEY (customer_secondary) REFERENCES tb_customer (id)
    );
     
    CREATE TABLE tb_language
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    s_language TEXT DEFAULT 'Francais' NOT NULL UNIQUE
    );
     
    CREATE TABLE tb_location
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    s_country INTEGER NOT NULL,
    s_city TEXT NOT NULL,
    i_postal_code INTEGER NOT NULL,
    i_street_number INTEGER NOT NULL,
    s_street_name TEXT NOT NULL,
    b_appartment INTEGER(1,0) DEFAULT '0',
    b_house INTEGER(1,0) DEFAULT '0',
    i_appartment_number INTEGER
    );
     
    CREATE TABLE tb_promotion
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    i_discount_pourcent INTEGER,
    date_start INTEGER,
    date_end INTEGER,
    b_active_promotion INTEGER(1,0) DEFAULT '0',
    b_recusrive_day INTEGER(1,0) DEFAULT '0' NOT NULL,
    FOREIGN KEY (date_start) REFERENCES tb_date (id) ,
    FOREIGN KEY (date_end) REFERENCES tb_date (id)
    );
     
    CREATE TABLE tb_customer_reservation
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    customer_reservation INTEGER NOT NULL,
    reservation_customer INTEGER NOT NULL,
    employee_reservation INTEGER,
    FOREIGN KEY (reservation_customer) REFERENCES tb_reservation (id) ,
    FOREIGN KEY (customer_reservation) REFERENCES tb_customer (id) ,
    FOREIGN KEY (employee_reservation) REFERENCES tb_employee (id)
    );
     
    CREATE TABLE tb_type_reservation
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    s_type TEXT NOT NULL,
    i_duration INTEGER DEFAULT 0 NOT NULL,
    i_price INTEGER DEFAULT '0' NOT NULL,
    promotion INTEGER,
    FOREIGN KEY (promotion) REFERENCES tb_promotion (id)
    );
     
    CREATE TABLE tb_reservation
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    date_reservation INTEGER NOT NULL,
    b_canceled INTEGER(1,0) DEFAULT '0',
    b_pay INTEGER(1,0) DEFAULT '0',
    type_reservation INTEGER,
    FOREIGN KEY (date_reservation) REFERENCES tb_date (id) ,
    FOREIGN KEY (type_reservation) REFERENCES tb_type_reservation (id)
    );
     
    CREATE TABLE tb_type_unavailable
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    s_type TEXT NOT NULL
    );
     
    CREATE TABLE tb_unavailable
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    date_starting INTEGER NOT NULL,
    date_end INTEGER,
    i_duration INTEGER,
    type_unavailabe INTEGER,
    "b_ completed" INTEGER(0,1) DEFAULT '0',
    FOREIGN KEY (type_unavailabe) REFERENCES tb_type_unavailable (id) ,
    FOREIGN KEY (date_starting) REFERENCES tb_date (id) ,
    FOREIGN KEY (date_end) REFERENCES tb_date (id)
    );
     
    CREATE TABLE tb_user
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    s_email TEXT NOT NULL UNIQUE,
    s_first_name TEXT NOT NULL,
    s_last_name TEXT NOT NULL,
    s_password TEXT NOT NULL,
    i_phone_number INTEGER NOT NULL,
    location_home INTEGER,
    language_default INTEGER NOT NULL,
    date_birthdate INTEGER,
    b_inactive INTEGER(1,0) DEFAULT 1,
    b_blocked INTEGER(1,0) DEFAULT 0,
    FOREIGN KEY (location_home) REFERENCES tb_date (id) ,
    FOREIGN KEY (language_default) REFERENCES tb_user (id) ,
    FOREIGN KEY (date_birthdate) REFERENCES tb_language (id) ,
    FOREIGN KEY (location_home) REFERENCES tb_location (id)
    );
     
    CREATE TABLE tb_work_day
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    s_day TEXT NOT NULL,
    i_start_minute_day INTEGER,
    i_start_hour_day INTEGER NOT NULL,
    i_end_minute_day INTEGER,
    i_end_hour_day INTEGER NOT NULL,
    i_start_hour_break INTEGER,
    i_start_minute_break INTEGER,
    i_end_minute_break INTEGER,
    i_end_hour_break INTEGER
    );
     
    CREATE TABLE tb_customer
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    user_person INTEGER,
    date_inscription INTEGER NOT NULL,
    customer_sponsor INTEGER,
    i_fidelity_number INTEGER DEFAULT '0' NOT NULL,
    b_newsletter INTEGER(1,0) DEFAULT '0',
    FOREIGN KEY (date_inscription) REFERENCES tb_date (id) ,
    FOREIGN KEY (customer_sponsor) REFERENCES tb_customer (id) ,
    FOREIGN KEY (user_person) REFERENCES tb_user (id)
    );
     
    CREATE TABLE tb_employee
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    user_person INTEGER NOT NULL,
    date_start INTEGER NOT NULL,
    date_end INTEGER,
    b_administrator INTEGER(1,0) DEFAULT '0',
    unavailabe INTEGER,
    planning INTEGER,
    FOREIGN KEY (user_person) REFERENCES tb_user (id) ,
    FOREIGN KEY (date_start) REFERENCES tb_date (id) ,
    FOREIGN KEY (date_end) REFERENCES tb_date (id) ,
    FOREIGN KEY (unavailabe) REFERENCES tb_unavailable (id) ,
    FOREIGN KEY (planning) REFERENCES tb_planning (id)
    );
     
    CREATE TABLE tb_planning
    (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    work_day INTEGER,
    b_recursive INTEGER(1,0) DEFAULT '0' NOT NULL,
    FOREIGN KEY (work_day) REFERENCES tb_work_day (id)
    );
    Les critiques /conseils / avis sont les bienvenus

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut
    Le problème est résolu.

    Pour les intéresser la solution mis en place consiste à redéfinir la table utilisateur pour une authentification par email.

    En suite dans le setting je déclare mon nouvel utilisateur et je peux ensuite l'appeler dans tous les autres modules ce qui rend le système indépendant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class User(AbstractUser):
        username = models.CharField(_('username'), max_length=30, blank=True)
        email = models.EmailField(_('email address'), unique=True)
        date_birth = models.DateField(null=True, blank=True)
        phone_number = models.IntegerField(null=True, blank=True)
        location = models.ForeignKey(Location, on_delete=models.CASCADE,
            null=True, blank=True)
     
        USERNAME_FIELD = 'email'
        REQUIRED_FIELDS = []
     
        objects = MyUserManager()
     
        class Meta:
            verbose_name = _('user')
            verbose_name_plural = _('users')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from django.db import models
     
    from django.db import models
    from django.conf import settings
    import datetime
     
    class Employee(models.Model):
        myUser = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.CASCADE,
            limit_choices_to={'is_staff': True},
        )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Associé] Développement d'une application de communication mobile
    Par Start-App dans le forum Autres
    Réponses: 0
    Dernier message: 21/03/2014, 15h50
  2. [Python - PCSC] application de communication carte à puce
    Par moulefrite dans le forum Général Python
    Réponses: 2
    Dernier message: 10/03/2009, 09h49
  3. [Application externe] communication
    Par superhu dans le forum Langage
    Réponses: 1
    Dernier message: 03/06/2008, 18h54
  4. Communication dll vers application
    Par portu dans le forum Langage
    Réponses: 8
    Dernier message: 27/02/2004, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo