2017-10-09 4 views
2

Désolé, si c'est une question très basique, mais je me demandais où les valeurs de champ de modèle utilisateur Django comme is_active sont enregistrés comme je ne les vois pas dans la base de données.Où sont enregistrés les champs du modèle Django?

J'utilise un modèle utilisateur personnalisé, mais ils doivent encore l'être quelque part ... :)

models.py

class MyUserManager(BaseUserManager): 
    def create_user(self, username, email, password=None): 
     """ 
     Creates and saves a User with the given email and password. 
     """ 
     if not email: 
      raise ValueError('Users must have an email address') 

     user = self.model(
      email=self.normalize_email(email), 
     ) 

     self.username = username 
     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    ... 

class MyUser(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
    ) 

    is_active = False 

    objects = MyUserManager() 

    USERNAME_FIELD = 'email' 

    ... 

tables dans la base de données:

Schema |   Name   | Type | Owner  
--------+------------------------+-------+------------ 
public | auth_group    | table | xxx 
public | auth_group_permissions | table | xxx 
public | auth_permission  | table | xxx 
public | django_admin_log  | table | xxx 
public | django_content_type | table | xxx 
public | django_migrations  | table | xxx 
public | django_session   | table | xxx 
public | drillapp_myuser  | table | xxx 
public | drillapp_question  | table | xxx 
public | drillapp_story   | table | xxx 
(10 rows) 

Cette est comment la table d'utilisateur ressemble. Pas de colonne is_active.

drill=# select * from drillapp_myuser; 
id |    password    | last_login |  email   
----+---------------------------------------+------------+---------------------- 
45 | pbkdf2_sha256$36000$GNzjZ...edPewC28= |   | [email protected] 
(1 row) 

Dans le shell, je peux accéder au champ is_active, que je ne vois pas dans la base de données:

>>> from django.contrib.auth import get_user_model 
>>> u = get_user_model().objects.get(pk=45) 
>>> u.is_active 
False 

Répondre

2

dans votre cas is_active est la classe python property qui ne sont pas enregistrées dans la base de données , si vous voulez enregistrer et manipuler, vous devez utiliser models.BooleanField