3 votes

Django: Impossible d'accéder aux attributs du modèle

Récemment, j'ai commencé à utiliser ma base de données mysql existante dans Django. L'implémentation a fonctionné.

Les paramètres de la base de données ressemblent à ceci

DATABASES = {
'default': {
    'NAME': 'app_data',
    'ENGINE': 'django.db.backends.sqlite3',
},
'users': {
    'NAME': 'user_data',
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'test01',
    'USER': 'test01',
    'PASSWORD': 'test',
    'HOST': 'localhost',
    'PORT': '',
}

Utilisation de la connexion de base de données 'users' dans mon modèle 'MyUser' comme suit.

class MyUser(models.Model):
    name = models.CharField(max_length=50)
    key = models.CharField(max_length=32)
    options = models.TextField(blank=True, null=True)
    description = models.TextField(blank=True, null=True)
    statistics = models.TextField(blank=True, null=True)
    create_time = models.DateTimeField()
    modify_time = models.DateTimeField()
    is_enabled = models.IntegerField(blank=True, null=True)
    password = models.CharField(max_length=50, blank=True, null=True)
    hosts = models.TextField(blank=True, null=True)
    remote_ips = models.CharField(max_length=200, blank=True, null=True)
    presets = models.TextField(blank=True, null=True)
    icons = models.TextField(blank=True, null=True)
    roles = models.TextField(blank=True, null=True)
    resources = models.TextField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'user'

J'ai obtenu la même sortie que ci-dessus en inspectant la base de données avec

python manage.py inspectdb --database=users

Comme j'utilise une base de données externe pour mon authentification utilisateur et que mon modèle est très différent de celui par défaut, j'ai écrit un backend personnalisé en utilisant le modèle utilisateur par défaut de Django et en copiant les utilisateurs lors de leur première connexion.

from django.conf import settings
from django.contrib.auth.hashers import check_password
from django.contrib.auth.models import User
from dashboard.models import MyUser

class UserAuthentication(object):

def authenticate(self, username=None, password=None):
    try:
        myuser = MyUser.objects.get(name=username);
    except MyUser.DoesNotExist:
        myuser = None
    if myuser and myuser.password == password:
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            user = User(username=username, password=password)
            user.save()
        return user
    return None

def get_user(self, user_id, user_name):
    try:
        return User.objects.get(pk=user_id)
    except User.DoesNotExist:
        return None

Je ne suis même pas capable de confirmer que tout fonctionne car je suis déjà bloqué lors de la connexion.

Cannot resolve keyword 'name' into field. Choices are: id

Je suis encore novice dans l'utilisation de Python et Django. Utilisant Python 2.7.12 et Django 1.10.3 J'apprécie toute aide, merci de lire!

0voto

user3461003 Points 1

Vous pouvez sélectionner manuellement une base de données à utiliser. Consultez ces documents: https://docs.djangoproject.com/en/1.11/topics/db/multi-db/#manually-selecting-a-database-for-a-queryset

Essentiellement, vous pouvez choisir une base de données lorsque vous interrogez avec MyUser.objects.using('users').all().

Cela résout-il votre problème?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X