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 :

[modèles] Ajout de contraintes.


Sujet :

Django Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Par défaut [modèles] Ajout de contraintes.
    Bonjour,
    je cherche comment faire pour qu'une contrainte d'unicité ne s'applique non pas sur un mais sur deux attributs, et pas moyen de trouver ça dans le doc

    Petit exemple pour bien comprendre.
    Si j'ai la classe ci dessous et que je souhaite que tout les couples nom/prenom soit unique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Personne(models.Model):
       nom = models.CharField(max_length=100)
       prenom = models.CharField(max_length=100)
    (nom1; prenom 1) (nom1; prenom2) -> [OK]
    (nom1; prenom 1) (nom2; prenom1) -> [OK]
    (nom1; prenom 1) (nom1; prenom1) -> [ERREUR] car les deux objets possède strictement les même valeurs pour nom et prénom.

    Je cherche donc à définir cette contrainte d'unicité sur deux attributs dans ma classe Personne mais pas moyen de trouver la solution dans la documentations.

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Il faut utiliser unique_together : http://docs.djangoproject.com/en/dev...nique_together

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Par défaut
    Merci pour la réponse, la contrainte est bien définis maintenant.

    Par contre il existe un autre type de contrainte que je n'ai pas encore réussis à finir.

    Si j'ai la classe Periode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Periode(models.Model):
       debut = models.DateField()
       fin = models.DateField()
    Je souhaite que pour tout objet période la date de début soit antérieur à la date de fin mais encore une fois je n'arrive pas à trouver le point de documentation en rapport avec ce genre de cas.

    Merci d'avance

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    salut,
    Je souhaite que pour tout objet période la date de début soit antérieur à la date de fin
    A quel niveau veux-tu vérifier cette contrainte?
    • au niveau de ton modèle?
    • au niveau de ta base de données?
    • ou au niveau de tes vues?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Par défaut
    Ce que je souhaite surtout c'est conserver la cohérence des données donc il faut :
    • Qu'il soit impossible d'insérer des dates non cohérentes.
    • Que la cohérence de la saisie de l'utilisateur soit vérifié.
    • Que l'utilisateur soit avertis en cas de problèmes dans sa saisie.


    Donc je pense que cette contrainte auras des conséquences sur les 3 niveaux.

  6. #6
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Pour valider les entrées de tes utilisateurs, tu peux utiliser un formulaire et définir une méthode clean_fin qui vérifie ta contrainte.

Discussions similaires

  1. Ajouter une contrainte UNIQUE à une clé
    Par Linio dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/06/2007, 13h36
  2. Ajouter une contrainte NOT NULL à une colonne
    Par abdelghani_k dans le forum Firebird
    Réponses: 1
    Dernier message: 03/06/2007, 16h26
  3. Ajouter la contrainte ON DELETE SET NULL a postériori
    Par EvilAngel dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/09/2006, 11h36
  4. commande pour ajouter une contrainte
    Par naazih dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/05/2006, 08h11
  5. Ajouter la contrainte NOT NULL a une colone [Firebird 1.5]
    Par crocodingo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2004, 18h52

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