Django:无法访问模型属性
Posted
技术标签:
【中文标题】Django:无法访问模型属性【英文标题】:Django: Can't access model attributes 【发布时间】:2017-05-04 15:22:32 【问题描述】:最近我开始在 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.12
和Django 1.10.3
感谢您的帮助,感谢阅读!
【问题讨论】:
user = User.objects.get(name=username)
不应该是user = MyUser.objects.get(name=username)
吗?
【参考方案1】:
您可以手动选择要使用的数据库。查看这些文档:https://docs.djangoproject.com/en/1.11/topics/db/multi-db/#manually-selecting-a-database-for-a-queryset
基本上,您可以在使用MyUser.objects.using('users').all()
查询时选择一个DB。
这能解决你的问题吗?
【讨论】:
以上是关于Django:无法访问模型属性的主要内容,如果未能解决你的问题,请参考以下文章