【发布时间】:2021-12-30 18:58:31
【问题描述】:
我正在尝试向我的用户管理模型添加一个属性,但它不起作用,
这是我成功的做法(我想添加非活动字段):
from django.contrib import admin
from .models import User
class usersAdmin(admin.ModelAdmin):
list_display = ('username', 'first_name', 'last_name', 'inactivity')
admin.site.register(User, usersAdmin)
这是我的型号代码:
class User(models.Model):
username = models.TextField(max_length=140, default='uid', primary_key=True)
first_name = models.TextField(max_length=140, default='cn')
last_name = models.TextField(max_length=140, default='givenName')
inactivity = models.IntegerField(default=500)
def _str_(self):
return self
当我试图从我的视图中访问我添加的字段时发生错误:
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
data = super().validate(attrs)
data['username'] = self.user.username
data['first_name'] = self.user.first_name
data['last_name'] = self.user.last_name
data['inactivity'] = self.user.inactivity
print(self.user)
return data
错误提示:
Traceback (most recent call last):
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\django\views\generic\base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\rest_framework_simplejwt\views.py", line 27, in post
serializer.is_valid(raise_exception=True)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\rest_framework\serializers.py", line 220, in is_valid
self._validated_data = self.run_validation(self.initial_data)
File "C:\Users\oussa\.virtualenvs\SYNEIKA-v3YFud-O\lib\site-packages\rest_framework\serializers.py", line 422, in run_validation
value = self.validate(value)
File "C:\Users\oussa\OneDrive\Documents\GitHub\SYNEIKA\backend\ldapapp\views.py", line 85, in validate
data['inactivity'] = self.user.inactivity
AttributeError: 'User' object has no attribute 'inactivity'
PS:我在 setting.py 中使用 LDAP 身份验证后端:
import ldap
from django_auth_ldap.config import LDAPSearch, LDAPGroupQuery,PosixGroupType
AUTH_LDAP_SERVER_URI = 'ldap://192.0.0.1'
AUTH_LDAP_BIND_DN = 'cn=admin,dc=syneika,dc=com'
AUTH_LDAP_BIND_PASSWORD = '123'
AUTH_LDAP_USER_SEARCH = LDAPSearch('ou=users,dc=syneika,dc=com',ldap.SCOPE_SUBTREE, '(uid=%(user)s)')
AUTH_LDAP_GROUP_SEARCH = LDAPSearch('ou=groups,dc=syneika,dc=com',ldap.SCOPE_SUBTREE, '(objectClass=top)')
AUTH_LDAP_GROUP_TYPE = PosixGroupType(name_attr="cn")
AUTH_LDAP_MIRROR_GROUPS = True
# Populate the Django user from the LDAP directory.
AUTH_LDAP_REQUIRE_GROUP = (
LDAPGroupQuery("cn=Active,ou=groups,dc=syneika,dc=com")
)
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail",
"username": "uid",
"password": "userPassword"
}
AUTH_LDAP_PROFILE_ATTR_MAP = {
"home_directory": "homeDirectory"
}
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_active": (
LDAPGroupQuery("cn=Active,ou=groups,dc=syneika,dc=com")
),
"is_staff": (
LDAPGroupQuery("cn=Staff,ou=groups,dc=syneika,dc=com")
),
"is_superuser": (
LDAPGroupQuery("cn=Superuser,ou=groups,dc=syneika,dc=com")
)
}
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_CACHE_TIMEOUT = 3600
AUTH_LDAP_FIND_GROUP_PERMS = True
# Keep ModelBackend around for per-user permissions and maybe a local
# superuser.
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
【问题讨论】:
-
您是否运行迁移以同步数据库中的模型...?
-
@AbubakariUmarblacKrussainUma 是的迁移 --fake
-
我想这就是为什么它不起作用,我建议你进入根目录迁移并删除所有迁移,然后将其同步回数据库,然后一切都应该从那里开始! --fake 迁移实际上不会使迁移在您的数据库中同步。
标签: django django-models django-rest-framework django-admin