Comme le titre le suggère, je joue avec l'utilisation d'une table existante pour le AUTH_USER_MODEL
en utilisant AbstractUser
. Avoir à --fake
la migration. Toutes les colonnes supplémentaires que je dois ajouter à la base de données manuellement, puis au modèle que certaines erreurs apparaissent. Pas idéal.Utiliser la table existante pour AUTH_USER_MODEL est-il possible pour un nom de champ de modèle Django de faire référence au nom de champ de base de données différent
Quoi qu'il en soit, quand je suis arrivé à ./manage.py createsuperuser
-je obtenir des erreurs liées à des domaines non existants: il faut is_superuser
, is_staff
, etc. La chose est qu'il ya des champs de la table pour déjà, ont juste un nom légèrement différent. Je pourrais juste changer le nom. Mais j'ai commencé à me demander s'il y avait quelque chose de intégré dans Django pour convertir un nom de champ ORM en un nom de champ de table. Quelque chose comme:
class Meta:
db_table = 'Users'
Où Django prend le nom, sauf indication contraire.
Mon bref aperçu de la documentation n'a pas immédiatement donné quelque chose.
https://docs.djangoproject.com/en/1.11/ref/models/options/
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
# Extend the User model
class User(AbstractUser):
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=255, blank=False, null=False, unique=True)
first_name = models.CharField(max_length=255, blank=True, null=True)
last_name = models.CharField(max_length=255, blank=True, null=True)
email = models.CharField(max_length=255, blank=True, null=True)
phone = models.CharField(max_length=255, blank=True, null=True)
password = models.CharField(max_length=255, blank=True, null=True)
cono = models.IntegerField(blank=False, null=False)
ip_whitelist_1 = models.CharField(max_length=32, blank=True, null=True)
ip_whitelist_2 = models.CharField(max_length=32, blank=True, null=True)
ip_whitelist_3 = models.CharField(max_length=32, blank=True, null=True)
last_login = models.DateTimeField(blank=True, null=True)
password_changed = models.DateField(blank=True, null=True)
security_q1 = models.CharField(max_length=255, blank=True, null=True)
security_q2 = models.CharField(max_length=255, blank=True, null=True)
security_a1 = models.CharField(max_length=255, blank=True, null=True)
security_a2 = models.CharField(max_length=255, blank=True, null=True)
role = models.IntegerField(blank=True, null=True)
login_unlock_date = models.DateTimeField(blank=True, null=True)
challenge_unlock_date = models.DateTimeField(blank=True, null=True)
active = models.SmallIntegerField(blank=True, null=True)
updated = models.DateTimeField(blank=True, null=True)
created = models.DateTimeField(blank=True, null=True)
# having to add these
is_superuser = models.SmallIntegerField(blank=True, null=True)
is_staff = models.SmallIntegerField(blank=True, null=True)
is_active = models.SmallIntegerField(blank=True, null=True)
REQUIRED_FIELDS = []
USERNAME_FIELD = 'username'
is_anonymous = False
is_authenticated = True
class Meta:
db_table = 'Users'