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 mettre en place sa propre base de donnée


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut django mettre en place sa propre base de donnée
    Bonjour,

    Je voudrais créer ma propre data base qui contiendra une table Personnel où seront stocké des identifiants et mot de passe. J'ai de créer mon propre modèle en héritant de AbstractBaseUser
    Après avoir fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    python manage.py makemigrations
    python manage.py migrate
    J'obtiens une database sans les tables que je souhaite avoir.


    app/models.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # Create your models here.
     
    class Secteur(models.Model):
        nomSecteur = models.CharField(verbose_name = "codeSecteur", max_length=50)
        codeSecteur = models.CharField(verbose_name = "precodeSecteur", max_length=50, primary_key=True)
     
    class Personnel(AbstractBaseUser):
        prenom = models.CharField(verbose_name = "prenom", max_length=20)
        nom = models.CharField(verbose_name = "nom", max_length=20)
        matricule = models.CharField(verbose_name="matricule", max_length=20, primary_key=True)
        nomFonction = models.ForeignKey(Secteur, on_delete=models.CASCADE)
     
        USERNAME_FIELD="matricule"
        REQUIRED_FIELDS = ["nom", "prenom"]
    app/admin.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from django.contrib import admin
    from .models import Secteur
     
    # Register your models here.
    admin.site.register(Secteur)
    project/settings.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AUTH_USER_MODEL="app.Personnel"

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Citation Envoyé par pitchu Voir le message
    Je voudrais créer ma propre data base qui contiendra une table Personnel où seront stocké des identifiants et mot de passe.


    Citation Envoyé par pitchu Voir le message
    J'obtiens une table sans les database que je souhaite avoir.
    Une table fait partie d'une base de données...

    On ne comprend pas bien votre problème !

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut
    Bonjour,

    J'ai inversé les termes ^^.

    J'ai vider le dossier app/migration puis refait les commandes pour générer la database et les tables apparaissent.
    J'ai rajouté dans REQUIRED_FIELDS: "nomFonction" et dans app/admin.py j'ai retiré ce que j'avais écrit

    Maintenant lorsque je souhaite créer un superUser avec la commende
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python manage.py createsuperuser
    : j'obtiens cette erreur: (après avoir entrer le nom, prénom, secteur, password)

    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
    Traceback (most recent call last):
      File "C:\Users\Documents\Workspace\django\src\manage.py", line 22, in <module>
        main()
      File "C:\Users\Documents\Workspace\django\src\manage.py", line 18, in main
        execute_from_command_line(sys.argv)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\management\__init__.py", line 446, in execute_from_command_line
        utility.execute()
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\management\__init__.py", line 440, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\management\base.py", line 402, in run_from_argv
        self.execute(*args, **cmd_options)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 88, in execute
        return super().execute(*args, **options)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\management\base.py", line 448, in execute
        output = self.handle(*args, **options)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 233, in handle
        self.UserModel._default_manager.db_manager(database).create_superuser(
    TypeError: UserManager.create_superuser() missing 1 required positional argument: 'username'
    Je ne comprends pas pourquoi il manque l'argument username alors que le modèle Personnel il n'y a pas cette propriété.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut
    J'ai pu résoudre ce problème en créant un manager personnalisé

    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
     
    from tabnanny import verbose
    from django.db import models
    from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
     
     
    # Create your models here.
     
    class MyUserManager(BaseUserManager):
     
        def create_user(self, matricule, prenom, nom, codeSecteur, password=None):
            if not prenom:
                raise ValueError("Prenom requis")
            if not nom:
                raise ValueError("nom requis")
            if not matricule:
                raise ValueError("matricule requis")
            if not codeSecteur:
                raise ValueError("codeSecteur requis")
     
            user=self.model(prenom = prenom, nom = nom, matricule = matricule, codeSecteur = codeSecteur)
            user.set_password(password)
            user.save()
            # user.save(using=self._db)
            return user
     
        def create_superuser(self, prenom, nom, matricule, codeSecteur, password=None):
            user=self.create_user(prenom = prenom, nom = nom, matricule = matricule, codeSecteur = codeSecteur, password = password)
     
            user.is_admin=True
            user.is_superuser=True
            # user.save(using=self._db)
            user.save()
            return user
     
    class Secteur(models.Model):
        nomSecteur = models.CharField(verbose_name = "nomSecteur", max_length=50)
        codeSecteur = models.CharField(verbose_name = "codeSecteur", max_length=3, primary_key=True)
     
        class Meta: db_table = "Secteur"
     
    class Personnel(AbstractBaseUser): #models.Model #AbstractBaseUser
        prenom = models.CharField(verbose_name = "prenom", max_length=20)
        nom = models.CharField(verbose_name = "nom", max_length=20)
        matricule = models.CharField(verbose_name="matricule", max_length=20, primary_key=True)
        codeSecteur = models.ForeignKey(Secteur, on_delete=models.CASCADE)
     
        USERNAME_FIELD="matricule"
        REQUIRED_FIELDS = ["nom", "prenom", "codeSecteur"]
     
        objects = MyUserManager()
     
        class Meta: db_table = "Personnel"
    J'ai ajouté à la table Secteur une ligne "Nom1" (nom secteur); "N1" (code secteur)

    J'obtiens une erreur lorsque je souhaite créer le superuser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueError: Cannot assign "'mkt'": "Personnel.codeSecteur" must be a "Secteur" instance.
    Les informations que j'entre sont:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    python manage.py createsuperuser
    Matricule: 001
    Nom: test
    Prenom: test
    CodeSecteur (Secteur.codeSecteur): N1

Discussions similaires

  1. Verizon serait en train de mettre en place son propre service de Cloud gaming
    Par Christian Olivier dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 17/01/2019, 12h13
  2. [MySQL] Passer d'un formulaire simple à la mise en place dans la base de données
    Par alex28240 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/01/2009, 16h01
  3. Mettre des images dans une base de donnée
    Par hugo7 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/01/2009, 18h46
  4. [MySQL] Mettre un booléen dans une base de donnée
    Par Viau dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2006, 15h14
  5. Interet de mettre des fichiers dans une base de donnée
    Par Oberown dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 04/07/2005, 11h35

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