python-2.7 - Django : Can't access model attributes

标签 python-2.7 modelattribute django-1.10 custom-backend field-names

最近我开始在 Django 中使用现有的 mysql 数据库。实现有效

数据库设置如下所示

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': '',
}

在我的模型“MyUser”中使用“用户”数据库连接,如下所示。

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'

通过检查数据库获得与上面相同的输出

python manage.py inspectdb --database=users

由于我使用外部数据库进行用户身份验证,而且我的模型与默认模型有很大不同,所以我使用 Django 的默认用户模型编写了一个自定义后端,并在用户首次登录时将其复制到它。

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

我什至无法确认一切正常,因为我在登录时已经卡住了。

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

我仍然是使用 Python 和 Django 的新手。 使用 Python 2.7.12Django 1.10.3 感谢您的帮助,感谢阅读!

最佳答案

您可以手动选择要使用的数据库。查看这些文档:https://docs.djangoproject.com/en/1.11/topics/db/multi-db/#manually-selecting-a-database-for-a-queryset

基本上,您可以在使用 MyUser.objects.using('users').all() 进行查询时选择一个数据库。

这是否解决了您的问题?

关于python-2.7 - Django : Can't access model attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41224891/

相关文章:

python - 错误的路径导致 python 程序使用 crontab 运行

python - 如何使用 python pandas 比较 unicode 日期 u'2006-07-23' 格式和 25-06-15 08 :42:43. 830000000 PM?

python-2.7 - 我可以通过 Keras 将图像添加到 Tensorboard 吗?

DjangoORM : Resolve F Expression in Custom DB Function

jquery - 如何在 Django 中创建多选框?

mysql - 使用 RIDE 从 MySql 获取数据

java - Spring - @ModelAttribute 行为

jsp - Spring 3-在JSP中访问Model值

java - 在 @ModelAttribute 注释方法中返回 Spring 模型

python - django 1.10 已安装应用程序列表